所以我看了很多相關的帖子在SO和其他地方,如:爲什麼我在32位Mac OS X系統上看到C++中的64位指針?
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(void*) = 8
下面的建議後,我在我的命令行改成這樣:
g++ -Wall -o TestClass1 -arch i386 TestClass1.cpp
和輸出更改爲:
sizeof(int) = 4
sizeof(void*) = 4
完全有意義。沒有意識到雪豹是默認爲64位彙編。感謝您的快速反饋!也許這是我的提示,不要寫這麼多的Java ...;) –
此外,你可以使用lipo來獲取有關二進制的信息,或從胖二進制文件中去除不需要的版本。 –
樂於幫助。請注意,OS X和Linux對64位代碼使用「LP64」模型,這意味着64位寬(在64位Windows系統上,長32位) - 這通常會讓來自Windows背景。 –