代码之家  ›  专栏  ›  技术社区  ›  Brent Writes Code

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

  •  1
  • Brent Writes Code  · 技术社区  · 14 年前

    所以我读了很多关于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 brent-nashs-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(空隙*)=8
    

    在下面的建议之后,我将命令行更改为:

    g++ -Wall -o TestClass1 -arch i386 TestClass1.cpp 
    

    然后输出变为:

    sizeof(int) = 4
    sizeof(void*) = 4
    
    1 回复  |  直到 13 年前
        1
  •  7
  •   Stephen Canon    14 年前

    您运行的是32位内核,但您正在将代码编译为64位可执行文件。32位和64位代码都可以在OSX中运行,不管使用的是哪个内核。

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