malloc分配的指针大小

时间:2013-03-11 06:03:13

标签: c memory malloc

char* pointer;
pointer = malloc (20000);

printf("%d", sizeof(pointer));
//output: 8

因为我使用malloc预留了20000个字节,所以我期待输出20000。 但是,它返回8.为什么会发生这种情况?

4 个答案:

答案 0 :(得分:3)

你必须使用64位系统/操作系统,这就是为什么它为printf打印8(“%d”,sizeof(指针));

当你声明char * p;它将在你的记忆中保留等于sizeof(char *)的空间。

现在如果系统是64位,它将保留8个字节,或者如果它是32位,那么它将保留4个字节。

现在

char* pointer;
pointer = malloc (20000);

当你定义pointer = malloc(20000)时,它将在内存中保留一个20000字节的块,其中指针指向该块的第一个字节,它不会为指针分配20000个字节。

答案 1 :(得分:2)

sizeof会返回您传递给它的类型的大小 类型为char *,它只指向大小为20000的内存位置。

答案 2 :(得分:0)

sizeof是一个编译时运算符。它只知道指针的大小(这里是8个字节)而不是它指向的大小。 <{1}}在运行时不存在。

答案 3 :(得分:0)

sizeof为您提供指针变量的大小,而不是指向它的区域。