我只是想知道:既然sizeof()' 的返回类型是size_t,为什么sizeof(size_t)给我4?也就是说,当 I 时malloc(someSize),我要求的是someSizebytes 还是someSize*4bytes ?
我已经做了两天的 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)了多少字节(chars) 。T但是,由于某些类型可能非常大,占用数千甚至数百万字节(想想大型数组),因此必须使用本身占用几个字节的整数类型来存储此值(size_t)。
打个比方,写出数字 10^100(假设),然后计算这个数字有多少个十进制数字。写下后一个数字(提示:它是 100)。100 本身需要几个十进制数字才能写出,但这并不影响 10^100 占用多少位。
为什么
sizeof(size_t)给我4?
因为size-tis 的类型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