【发布时间】:2009-11-24 05:41:15
【问题描述】:
所以我已经阅读了很多关于 SO 和其他地方的相关帖子,例如:
Is the sizeof(some pointer) always equal to four?
在 32 位系统上我期望 4 字节指针和在 64 位系统上我期望 8 字节指针对我来说完全有意义。所以我正在运行这段代码:
int main()
{
cout << "sizeof(int) = " << sizeof(int) << endl;
cout << "sizeof(void*) = " << sizeof(void*) << endl;
}
这是相应的输出:
sizeof(int) = 4
sizeof(void*) = 8
我在 Mac OS X 10.6.1 上以 32 位模式运行。这是“uname -a”的输出:
Darwin brents-macbook.local 10.0.0 Darwin Kernel Version 10.0.0: Fri Jul 31 22:47:34 PDT 2009; root:xnu-1456.1.25~1/RELEASE_I386 i386 i386
这是我正在运行的 g++ 版本(系统自带的默认版本):
i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646)
所以我意识到指针的大小并不能保证从一个系统到另一个系统,它们完全依赖于编译器和体系结构,但是这个结果是否会让其他人觉得不合逻辑?这只是 Mac OS X 10.6 或我的设置的特性吗?还是有充分的理由让我看到这种大小的指针?
================================================ ===
答案后加法
任何想要它们的人的额外细节......
我最初是用这个命令行编译的:
g++ -Wall -o TestClass1 TestClass1.cpp
它生成了这个输出:
sizeof(int) = 4
sizeof(void*) = 8
根据以下建议,我将命令行更改为:
g++ -Wall -o TestClass1 -arch i386 TestClass1.cpp
输出变成这样:
sizeof(int) = 4
sizeof(void*) = 4
【问题讨论】: