亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無符號int與大小t

無符號int與大小t

C++ C
慕沐林林 2019-07-02 15:09:11
無符號int與大小t我注意到現代C和C+代碼似乎使用size_t而不是int/unsigned int幾乎無處不在-從C字符串函數的參數到STL。我很好奇這樣做的原因及其帶來的好處。
查看完整描述

3 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

這個size_t類型是無符號整數類型,它是sizeof運算符(以及offsetof運算符),因此保證它足夠大,足以包含您的系統能夠處理的最大對象的大小(例如,一個8GB的靜態數組)。

這個size_t類型可以大于、等于或小于unsigned int,而您的編譯器可能會對其進行優化假設。

您可以在C99標準第7.17節中找到更精確的信息,其草稿可在PDF格式,或C11標準第7.19節,也可作為PDF草稿.


查看完整回答
反對 回復 2019-07-02
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

總之,size_t永遠不會是負的,而且它最大限度地提高了性能,因為它是一個無符號整數類型,它足夠大-但不太大-可以表示目標平臺上最大對象的大小。

尺寸永遠不應該是負面的,事實上size_t是無符號類型。還有,因為size_t是無符號的,您可以存儲大約是相應有符號類型的兩倍的數字,因為我們可以使用符號位來表示大小,就像無符號整數中的所有其他位一樣。當我們再得到一位時,我們將可以表示的數字范圍乘以約2的倍數。

所以,你會問,為什么不直接用一個unsigned int?它可能無法容納足夠大的數字。在實現中unsigned int是32位,它能表示的最大數字是4294967295..某些處理器,例如IP16L32,可以復制大于4294967295字節。

所以,你會問,為什么不使用一個unsigned long int?它要求在某些平臺上進行性能測試。標準C要求long至少占32位。IP16L32平臺實現了每一個32位長的16位字.這些平臺上的幾乎所有32位操作符都需要兩條指令,如果不是更多的話,因為它們使用兩塊16位塊的32位。例如,移動32位長通常需要兩個機器指令-一個移動每個16位塊。

使用size_t避免這種性能損失。根據這篇精彩的文章,“類型”size_t是一個類型,它是某些無符號整數類型的別名,通常是unsigned intunsigned long,但可能甚至unsigned long long..每個標準C實現都應該選擇足夠大但不超過需要的無符號整數來表示目標平臺上最大對象的大小?!?/trans>


查看完整回答
反對 回復 2019-07-02
  • 3 回答
  • 0 關注
  • 611 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號