簡體   English   中英

為什么我在 32 位 Mac OS X 系統上看到 C++ 中的 64 位指針?

[英]Why do I see 64-bit pointers in C++ on my 32-bit Mac OS X system?

所以我已經閱讀了很多關於 SO 和其他地方的相關帖子,例如:

sizeof(some pointer) 總是等於四嗎?

對我來說,在 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 的默認設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM