【发布时间】:2019-10-06 02:40:55
【问题描述】:
通过在普通台式 PC 上运行一个简单的 C++ 程序进行基本测试,假设任何类型的指针(包括指向函数的指针)的大小等于目标架构位似乎是合理的?
例如:在 32 位架构中 -> 4 字节和在 64 位架构中 -> 8 字节。
但我记得读过,一般情况下不是这样的!
所以我想知道这种情况会是什么?
- 与指针大小相比,指向数据类型的指针大小相等 到其他数据类型
- 与指针大小相比,指向数据类型的指针大小相等 到函数
- 目标架构的指针大小相等
【问题讨论】:
-
在某些架构上,并非所有指针的大小都相同。显然,两个不同的大小不能都等于相同的“架构大小”。 PIC 通常具有 8 位数据指针和 14 位函数指针。 16 位 x86 有 16 位近指针和 32 位远指针。
-
如果您的计算机体系结构使用银行交换内存,则指针可能由两部分组成:银行和进入银行的地址。如果您的架构使用分段内存,则“远”地址可能由段和偏移量组成,而“近”地址可能仅具有偏移量。函数指针的大小可能与数据指针不同,成员指针可能具有重要的实现细节,使其可能比架构大 x2 或 x3..
-
这只是要求“不,你不能假设”吗?还是假设失效的每种情况的开放式列表?还是什么?
-
@Useless 好吧,这个问题本身很开放,但答案很简单。 “如果正确性取决于它,就不要假设它。”
-
“目标架构位”你如何定义它?
标签: c++ c assembly portability