我知道我可以信賴sizeof(char) == 1
,但sizeof(uint32_t)
和sizeof(uint8_t)
呢? 不應該是32位(8位)大小的名字猜測? 謝謝!我可以依靠sizeof(uint32_t)== 4嗎?
回答
固定大小的類型將永遠是這個大小。如果你在一個不具有這種大小的整數類型的奇怪平臺上,那麼它們將是未定義的。
請注意,它不一定遵循sizeof(uint32_t) == 4
,如果CHAR_BIT != 8
;這隻會發生在奇怪的平臺上。
不,它完全依賴於你的編譯器和體系結構(即它會給你不同的結果,你沒有整數類型)。如果你得到CHAR_BIT == 8
那麼是的,你可以依靠這一點。所以,如果你在64位體系結構上將與32位體系結構中的64位邊界對齊,那麼所有內容都將對齊到4個字節。
因此,如果數據大小很重要(例如一組位標誌),請始終使用固定大小類型。
我不明白這一點。這是否意味着'malloc(sizeof(unit32_t)* x)'在64 vs 32 arch上請求「兩倍的空間」? – user2864740
@ user2864740: - uint32_t的對齊要求必須小於或等於sizeof(uint32_t)。由於要求uintN_t類型中沒有填充,因此sizeof(uint32_t)* CHAR_BIT == 32.其他任何內容都不符合C99。 –
那麼它是否依賴(如答案中)或保證(如評論中)uint32_t? :> – user2864740
絕對不是,至少關於sizeof(uint32_t)
。 sizeof
返回字節數,而不是位數 ,如果平臺上的字節是16位,則sizeof(uint32_t)
將是2,而不是4;如果一個字節是32位(並且實際上存在這樣的平臺 ),則sizeof(uint32_t)
將是1(並且uint32_t
可以是到unsigned char
的類型定義)。
當然,在這種情況下,uint8_t
將不會被定義。
但size_of返回*字節數*或*字符數*?當CHAR_BIT!= 8時它們是否是任何情況? – user2864740
@ user2864740'sizeof(char)'保證等於1. – rightfold
@ user2864740,在C/C++對象模型中,'char'是按字節定義的。 – ach
- 1. 我可以依靠mod_rewrite嗎?
- 2. 我可以依靠MSXML4嗎?
- 3. 我可以依靠malloc返回NULL嗎?
- 4. 我可以依靠shell()的存在嗎?
- 5. 我可以依靠模板類型嗎?
- 6. 我可以依靠Cheerio以文件順序退貨嗎?
- 7. AppEngine + django:依靠兩者都可靠嗎?
- 8. 我可以依靠iOS設備時鐘正確嗎?
- 9. 我可以依靠volumeClaimTemplates命名約定嗎?
- 10. 我可以依靠sql視圖中的字段順序嗎?
- 11. 我可以依靠ctl00_PagePlaceHolder_myId保持不變嗎?
- 12. 我可以依靠CDN永久存儲照片嗎?
- 13. 我可以依靠「共享主機上的SSL」嗎?
- 14. 我可以依靠SDL_Surface :: pitch來保持常量嗎?
- 15. 我可以依靠ETags進行緩存控制嗎
- 16. PayPal Express Checkout:我可以依靠PAYMENTREQUEST_0_ADDRESSSTATUS值嗎?
- 17. 我可以依靠using語句來關閉我的MySQL連接嗎?
- 18. 我應該依靠髒檢查嗎?
- 19. 我可以可靠地依靠具有相同名稱的GET變量的順序嗎?
- 20. 可以參考依靠關閉Python中的文件嗎?
- 21. 可以依靠自動傳遞引用來改變對象嗎?
- 22. 可以依靠很多第三方軟件包嗎?
- 23. 依靠__del __()進行python清理不可靠嗎?
- 24. 你可以依靠socket.id作爲UID
- 25. 什麼是webfont,我可以依靠他們
- 26. 初次握手後,我可以安全地依靠WebSocket連接嗎?
- 27. 我可以依靠在傳入python之前進行評估的參數嗎?
- 28. 我可以依靠按註冊順序調用的事件處理程序嗎?
- 29. 我可以依靠短路評估來檢查C++中的向量邊界嗎?
- 30. 我可以依靠ISet.Add方法把新成員放在最後位置嗎?
如果'sizeof()'僅在這些情況下返回位而不是字節將會非常不一致。 –
顯然,只要'CHAR_BIT == 8',你就可以。現在,如果不是那樣的話,找到一個架構並不容易。 – ach
'sizeof()'返回字節數,'uint32_t'指定以位爲單位的寬度,所以基本上,目標平臺上一個字節的位數是多少?請參閱'CHAR_BIT'。 – Niall