Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在C++;在我的32位Mac OS X系统上?_C++_Macos_Pointers_X86 - Fatal编程技术网

C++ 为什么在C++;在我的32位Mac OS X系统上?

C++ 为什么在C++;在我的32位Mac OS X系统上?,c++,macos,pointers,x86,C++,Macos,Pointers,X86,因此,我在So和其他网站上阅读了很多相关帖子,如: 对我来说,在32位系统上,我希望使用4字节指针,在64位系统上,我希望使用8字节指针,这完全有道理。因此,我运行以下代码: int main() { cout << "sizeof(int) = " << sizeof(int) << endl; cout << "sizeof(void*) = " << sizeof(void*) << endl; } 我在M

因此,我在So和其他网站上阅读了很多相关帖子,如:

对我来说,在32位系统上,我希望使用4字节指针,在64位系统上,我希望使用8字节指针,这完全有道理。因此,我运行以下代码:

int main()
{
  cout << "sizeof(int) = " << sizeof(int) << endl;
  cout << "sizeof(void*) = " << sizeof(void*) << endl;
}
我在Mac OS X 10.6.1上以32位模式运行。以下是“uname-a”的输出:

以下是我正在运行的g++版本(系统附带的默认版本):

所以我意识到,指针的大小不能保证从一个系统到另一个系统,它们完全依赖于编译器和体系结构,但是这个结果会让其他人觉得不合逻辑吗?这只是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位代码都可以在OSX中运行


如果要将代码编译成32位可执行文件,请将
-arch i386
标志传递给gcc。64位对应的标志是
-arch x86_64
,但它是雪豹上的默认标志。

完全有意义。没有意识到雪豹默认为64位编译。感谢您的快速反馈!也许这是我停止编写这么多Java的提示…;)此外,您还可以使用lipo获取有关二进制文件的信息,或者从fat二进制文件中删除不需要的版本。很高兴为您提供帮助。请注意,OS X和Linux对64位代码使用“LP64”模型,这意味着long是64位宽(在64位Windows系统上,long是32位)——这通常会让来自Windows背景的人感到困惑。
sizeof(int) = 4
sizeof(void*) = 8
g++ -Wall -o TestClass1 -arch i386 TestClass1.cpp 
sizeof(int) = 4
sizeof(void*) = 4