将sizeof运算符与非常大的对象一起使用

时间:2014-10-13 12:07:43

标签: c sizeof

根据第135页K& R(以及this维基百科页面),sizeof运算符可用于计算对象的大小,并以字节大小返回size_t类型的无符号整数。由于无符号整数的最大值是2 ^ 32,如果我在一个字节大于2 ^ 32的对象上调用sizeof会发生什么,比如大小为2 ^ 34字节的东西。尺寸会返回什么?有没有办法绕过这个尺寸限制?

2 个答案:

答案 0 :(得分:5)

我认为你错了。

"无符号整数"并不意味着"类型unsigned int"。例如,它也可以是unsigned long long,它可以(更大)。当然,也没有要求或规范说明unsigned int限制为32位。

答案 1 :(得分:3)

  

sizeof以字节为单位返回大小为size_t 的无符号整数

size_t是其中一种无符号整数类型(unsigned intunsigned long longunsigned short等的别名。哪个特定的无符号整数类型是实现定义的。

size_t保证能够存储系统上对象的理论最大大小。因此,如果您的size_t是32位无符号整数,则无法在系统上创建大于2 ^ 32字节的对象。相反,如果你可以创建一个大于2 ^ 32字节的对象,那么size_t必须大于32位无符号整数,大到足以存储你可以创建的任何对象的大小。