【发布时间】:2013-05-10 12:11:13
【问题描述】:
在 C 和 C++ 中,我是否保证所有指针都具有相同的字节大小,或者换句话说:
sizeof(void*) = sizeof(char*) = sizeof(int*) = ...
或者有一些不正确的系统?
【问题讨论】:
-
我会让其他人回答您给出的示例,但在 C++ 中肯定会有所不同的是
class Foo; sizeof(void (Foo::*)()) -
@DarkFalcon 为什么会有所不同?
-
@leemes:因为它不是内存地址。 “最重要的是,与全局函数指针不同,成员函数指针在大多数实现中不仅仅是函数第一条指令的地址”yosefk.com/c++fqa/function.html
-
您需要担心的不仅仅是它们的尺寸。您还需要担心对齐要求(可能还有位表示)。
-
他们在同一个系统上做。对于给定的系统,所有指针都是(在 C 中,idk 关于 C++ 和类指针)。这是因为指针指向内存中的地址。在 32 位系统(4 个字节)中,寻址所有内存区域需要 4 个字节。因此,指向值的指针将是 4 个字节(因为我们只需要 4 个字节即可到达任何地址)。在 64 上,它通常是 8 字节指针(因为我们需要两倍的位来寻址所有内存!)。虽然有些系统可能会有所不同,但这是典型的实现方式。
标签: c++ c pointers architecture sizeof