2

我只是想知道:既然sizeof()' 的返回类型是size_t,为什么sizeof(size_t)给我4?也就是说,当 I 时malloc(someSize),我要求的是someSizebytes 还是someSize*4bytes ?

我已经做了两天的 ASM 作业,现在我很困惑。谢谢你的帮助!

4

3 回答 3

3

根据 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_tsizeof(size_t)

于 2013-09-28T16:31:41.810 回答
2

您混淆了表示某个值所需的字节数和表示该 size所需的字节数。或者,正如@Mat 在评论中所说,您混淆了类型和单位。报告一个类型的值占用sizeof(T)了多少字节(chars) 。T但是,由于某些类型可能非常大,占用数千甚至数百万字节(想想大型数组),因此必须使用本身占用几个字节的整数类型来存储此值(size_t)。

打个比方,写出数字 10^100(假设),然后计算这个数字有多少个十进制数字。写下后一个数字(提示:它是 100)。100 本身需要几个十进制数字才能写出,但这并不影响 10^100 占用多少位。

于 2013-09-28T16:35:24.880 回答
1

为什么sizeof(size_t)给我4?

因为size-tis 的类型unsigned long intsizeof(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函数决定了数据类型的大小(以字节为单位)。返回类型sizeofsize_t
因此,您可以说在返回类型数据时sizeof确定数据类型的大小(以字节为单位) 。size_t

于 2013-09-28T16:25:02.770 回答