【发布时间】:2011-02-13 11:04:18
【问题描述】:
gcc 4.4.1 c89
我有以下代码sn-p:
#include <stdlib.h>
#include <stdio.h>
char *buffer = malloc(10240);
/* Check for memory error */
if(!buffer)
{
fprintf(stderr, "Memory error\n");
return 1;
}
printf("sizeof(buffer) [ %d ]\n", sizeof(buffer));
但是,sizeof(buffer) 总是打印 4。我知道 char* 只有 4 个字节。但是,我已经分配了 10kb 的内存。那么大小不应该是10240吗?我想知道我在这里思考吗?
非常感谢您的任何建议,
【问题讨论】:
-
在大多数情况下,C 编译器(对于任何版本)都不知道函数
malloc实际做什么或用于做什么。它只知道它接受一个无符号整数 (size_t) 并返回一个 void 指针。它可以使用它的参数来播种随机数生成器并将随机数转换为(void *)以供编译器关心,因此编译器无法知道指向的内存大小。