我想知道爲什麼這個size_t
用於我可以使用說int類型。其表示size_t
是返回類型的sizeof
運算符。這是什麼意思?比如如果我使用sizeof(int)
並存儲它返回到int
類型變量,那麼它也可以工作,沒有必要將它存儲在size_t
類型變量中。我只是清楚地想知道使用size_t
的基本概念,用一個清楚易懂的例子。感謝任何人都可以解釋爲什麼size_t類型用於例子嗎?
回答
size_t
保證能夠代表最大尺寸可能,int
不是。這意味着size_t
更便攜。
例如,如果int
最多隻能存儲255個字符,但您可以分配5000個字節的數組?顯然這不會起作用,但size_t
它會。
從技術上講,int必須至少爲16位,它必須至少跨越[-32767..32767]範圍。 (爲什麼不用-32768?爲了適應補碼和符號 - 幅度系統,以防有人想在舊的Univac機器上使用C,當然這些系統有18位和36位整數,9位「 char)。 – torek 2012-03-11 00:54:49
@torek出於某種原因,我的印象是int只需要C> 16而不是C++。雖然沒有檢查標準。 – Pubby 2012-03-11 01:10:22
@Pubby:C++從C繼承了C++ 1.1 p2 C++是一種基於ISO/IEC 9899:1999中描述的C編程語言的通用編程語言。編程語言
–
2012-03-11 03:11:56
最簡單的例子是相當日:一箇舊的16比特int
系統上的RAM 64 K,一個int
的值可以是任何地方從-32768到32767,但之後:
char buf[40960];
緩衝區buf
佔用40千字節,所以sizeof buf
太大而不適合int
,它需要unsigned int
。
同樣的事情今天能發生,如果您使用的32位int
但允許程序在同一時間訪問超過4 GB的RAM,因爲是所謂的「I32LP64」模型(32位int
的情況下,64位long
和指針)。這裏的size_t
類型與unsigned long
的範圍相同。
它是實現定義,但在64位系統上,你會發現size_t
往往是64位,而int
仍然是32位(除非它是ILP64 or SILP64模型)。
取決於您所處的體系結構(16位,32位或64位)int可能是不同的大小。
,如果你想我用uint16_t或uint32_t的特定大小....你可以看看這個線程獲取更多信息
What does the C++ standard state the size of int, long type to be?
您使用的size_t主要用於轉換指針到相同的無符號整數大小,對指針進行計算,就好像它們是整數一樣,否則會在編譯時被阻止。這樣的代碼旨在在不同指針大小的上下文中正確編譯和構建,例如, 32位模型與64位。
- 1. 任何人都可以解釋一個Nullable類型的例子嗎?
- 2. 任何人都可以解釋OAuth嗎?
- 3. Lua任何人都可以解釋這是什麼嗎?
- 4. 任何人都可以用示例解釋string.compare(_:options:range:locale :)嗎?
- 5. 任何人都可以解釋爲什麼popToViewController:方法不起作用嗎?
- 6. 任何人都可以用簡單的例子來解釋計數器嗎?
- 7. Java Puzzler - 任何人都可以解釋這種行爲嗎?
- 8. local_variables的行爲 - 任何人都可以解釋嗎?
- 9. 任何人都可以將WMI解釋爲舊的SNMP chap嗎?
- 10. 任何人都可以解釋我這個快速排序的例子嗎?
- 11. appium中getWrappedDriver方法的用途是什麼?任何人都可以用一個例子來解釋嗎?
- 12. 任何人都可以解釋我StandardScaler?
- 13. 任何人都可以解釋「視場」
- 14. 任何人都可以解釋輸出
- 15. 任何人都可以解釋什麼是802.3 over multimode?
- 16. 任何人都可以解釋我什麼是項目[0] .qty
- 17. 任何人都可以解釋這個Java Mergesort行爲解釋嗎?
- 18. 任何人都可以用英語向我解釋這個嗎?
- 19. 任何人都可以用C++解釋事件處理嗎?
- 20. 任何人都可以解釋以下語句的輸出嗎?
- 21. 任何人都可以使用示例解釋ConcurrentLinkedList的用法嗎?
- 22. 任何人都可以解釋爲什麼文件不能使用AJAX上傳?
- 23. 在Java中,任何人都可以解釋爲什麼這個對象爲空?
- 24. 任何人都可以解釋爲什麼事件類型是縫中的任意字符串?
- 25. 任何人都可以解釋下面的代碼嗎?
- 26. 任何人都可以解釋我這個代碼行嗎?
- 27. 任何人都可以解釋下面的代碼嗎?
- 28. 任何人都可以在C中解釋這個結構嗎?
- 29. 任何人都可以解釋默認括號的含義嗎?
- 30. 任何人都可以解釋這種語法嗎?
您可以使用int來存儲sizeof的返回值,這與您有時可以將int 2147483647存儲在int中的方式相同。恰恰相反,實現特定的大小正確匹配。 – Lalaland 2012-03-10 23:39:19
另請參閱此問題:http://stackoverflow.com/questions/918787/whats-sizeofsize-t-on-32-bit-vs-the-various-64-bit-data-models – ChrisWue 2012-03-10 23:42:59
任何人都可以確認size_t是相同大小的處理器註冊? – arthurprs 2012-03-10 23:44:54