這個問題的答案取決于我們愿意得到多遠的實際考慮。
從理論上講,C和C+中的一切都取決于編譯器,而僅僅取決于編譯器。硬件/操作系統一點也不重要。編譯器可以自由地實現任何厚度和絕對模仿任何東西。沒有什么可以阻止C或C+實現int
任何大小的類型和任何表示形式,只要它足夠大以滿足語言標準中規定的最低要求。這種抽象級別的實用示例是現成的,例如基于“虛擬機”平臺的編程語言,如Java。
然而,C和C+的意圖是高度高效率語言。為了達到最大的效率,C或C+實現必須考慮從底層硬件派生的某些考慮因素。因此,確保每個基本類型都基于硬件直接(或幾乎直接)支持的某種表示是很有意義的。從這個意義上說,基本類型的大小確實取決于硬件。
換句話說,64位硬件/OS平臺的特定C或C+實現是完全免費的。int
作為一個71位1的補碼符號整數類型,占用128位內存,使用其他57位作為填充位,這是總是需要存儲編譯器作者的女朋友的生日。這種實現甚至具有一定的實用價值:它可以用于執行C/C+程序可移植性的運行時測試。但這正是實現的實際效用所在。不要指望在“普通”C/C+編譯器中看到類似的東西。