我想知道为什么这个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