为什么sizeof(size_t)不是1?

时间:2013-09-28 16:24:01

标签: c assembly malloc size-t

我只是想知道:由于sizeof()的返回类型为size_t,为什么sizeof(size_t)会给我4? 也就是说,当我malloc(someSize)时,我是否要求someSize字节或someSize*4个字节?

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

3 个答案:

答案 0 :(得分:3)

根据1999 ISO C标准(C99),size_t是一个至少为16位的无符号整数类型(见7.17和7.18.3节)。

  

size_t是由几个C / C ++标准定义的无符号数据类型,例如:在stddef.h.1中定义的C99 ISO / IEC 9899标准可以通过包含stdlib.h进一步导入,因为此文件内部子包含stddef.h。

     

此类型用于表示对象的大小。采用或返回大小的库函数期望它们是类型或返回类型为size_t。此外,最常用的基于编译器的运算符sizeof应评估为与size_t兼容的常量值。

这篇文章对此进行了讨论:What is size_t in C?

当你执行malloc(sizeof(int))时,它会动态分配四个字节的内存。请勿在{{1​​}}和size_t之间混淆。

答案 1 :(得分:2)

您可能会混淆表示某个值所需的字节数以及表示该大小所需的字节数。或者,正如@Mat将其放在评论中,你会混淆类型和单位。 sizeof(T)报告类型char占用的字节数(T s)。但是,因为某些类型可能非常大,占用数千甚至数百万字节(想想大型数组),所以必须使用本身占用几个字节的整数类型存储此值({{1} })。

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

答案 2 :(得分:1)

  

sizeof(size_t)为什么给我4?

由于size-t的类型为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类型数据。