[英]Why do I see 64-bit pointers in C++ on my 32-bit Mac OS X system?
所以我已經閱讀了很多關於 SO 和其他地方的相關帖子,例如:
對我來說,在 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.