【问题标题】:Why do I see 64-bit pointers in C++ on my 32-bit Mac OS X system?为什么我在 32 位 Mac OS X 系统上看到 C++ 中的 64 位指针?
【发布时间】: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

【问题讨论】:

    标签: c++ macos pointers x86


    【解决方案1】:

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

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

    【讨论】:

    • 完全有道理。没有意识到 Snow Leopard 默认使用 64 位编译。感谢您的快速反馈!也许这是我停止写这么多 Java 的暗示... ;)
    • 另外,您可以使用 lipo 获取有关二进制文件的信息,或从胖二进制文件中删除不需要的版本。
    • 乐于助人。请注意,OS X 和 Linux 对 64 位代码使用“LP64”模型,这意味着 long 是 64 位宽(在 64 位 Windows 系统上,long 是 32 位)——这经常会让来自 Windows 的人绊倒背景。
    猜你喜欢
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多