我只是想知道:既然sizeof()
' 的返回类型是size_t
,为什么sizeof(size_t)
给我4
?也就是说,当 I 时malloc(someSize)
,我要求的是someSize
bytes 还是someSize*4
bytes ?
我已经做了两天的 ASM 作业,现在我很困惑。谢谢你的帮助!
根据 1999 ISO C 标准 (C99),size_t
它是至少 16 位的无符号整数类型(参见第 7.17 和 7.18.3 节)。
这
size_t
是由几个 C/C++ 标准定义的无符号数据类型,例如 C99 ISO/IEC 9899 标准,在 stddef.h.1 中定义它可以通过包含 stdlib.h 进一步导入,因为该文件内部子包含 stddef 。H。此类型用于表示对象的大小。采用或返回大小的库函数期望它们的类型或返回类型为
size_t
. 此外,最常用的基于编译器的运算符 sizeof 应计算为与 兼容的常量值size_t
。
这在这篇文章中进行了讨论:C 中的 size_t 是什么?
当你这样做时,malloc(sizeof(int))
它会动态分配四个字节的内存。不要混淆size_t
和sizeof(size_t)
。
您混淆了表示某个值所需的字节数和表示该 size所需的字节数。或者,正如@Mat 在评论中所说,您混淆了类型和单位。报告一个类型的值占用sizeof(T)
了多少字节(char
s) 。T
但是,由于某些类型可能非常大,占用数千甚至数百万字节(想想大型数组),因此必须使用本身占用几个字节的整数类型来存储此值(size_t
)。
打个比方,写出数字 10^100(假设),然后计算这个数字有多少个十进制数字。写下后一个数字(提示:它是 100)。100 本身需要几个十进制数字才能写出,但这并不影响 10^100 占用多少位。
为什么
sizeof(size_t)
给我4?
因为size-t
is 的类型unsigned long int
,sizeof(size_t)
将给出unsigned long int
你机器上的大小(在我的机器上——32 位——它给出 4 个字节)。
#include <stdio.h>
int main ()
{
printf("%d\n", sizeof(unsigned long int));
printf("%d\n", sizeof(size_t));
return 0;
}
我问的是
someSize
字节还是someSize*4
字节?
答案是:someSize
,因为sizeof
函数决定了数据类型的大小(以字节为单位)。返回类型sizeof
为size_t
。
因此,您可以说在返回类型数据时sizeof
确定数据类型的大小(以字节为单位) 。size_t