c++ - 为什么我在 32 位 Mac OS X 系统上看到 C++ 中的 64 位指针?

标签 c++ macos pointers x86

所以我阅读了很多关于 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

最佳答案

您运行的是 32 位内核,但您正在将代码编译成 64 位可执行文件。无论使用哪个内核,32 位和 64 位代码都可以在 OS X 中运行。

如果要将代码编译成 32 位可执行文件,请将 -arch i386 标志传递给 gcc。 64 位的相应标志是 -arch x86_64,但这是 Snow Leopard 上的默认设置。

关于c++ - 为什么我在 32 位 Mac OS X 系统上看到 C++ 中的 64 位指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1788043/

相关文章:

cocoa - NSDictionary 和 NSArray 的内存占用

java - 我的应用程序显示错误的名称

C++11 枚举类包含重复值

c++ - 如何从 const float* 中获取 C++ vector

java - 理解 Kadane 的二维数组算法

objective-c - Mac Cocoa 应用程序 - Objective-C - 不同 NSViewController 中的不同主菜单

c - 数组指针的自动类型转换

c++ - 使用唯一的指针调用函数会使我的程序崩溃

c++ - sf::Text 成员函数 getFont() 不起作用?

c++ - C++ 模板函数中根据类型名调用不同的构造函数