C语言 为什么 malloc 在我请求 8 个字节时给我 20 个字节



我只是第一次用C语言玩,我不明白为什么malloc没有给我我期望的内存量。以下代码:

printf("Allocating %ld bytes of memoryn", 5*sizeof(int));
int *array = (int *) malloc(5*sizeof(int));
printf("%ld bytes of memory allocatedn", sizeof(array));

结果在:

Allocating 20 bytes of memory
8 bytes of memory allocated

我已经检查过我确实在调用 malloc 给我 20 个字节,但不明白为什么调用 malloc 后指针只有 8 个字节。

array

是一个数组,而是一个int *。 因此,它的大小将始终是指针的大小。

sizeof运算符不会告诉您在指针上动态分配了多少内存。

另一方面,如果您有这个:

int array2[5];

那么sizeof(array2)将是 20,假设int是 4 个字节。

sizeof运算符告诉您其操作数的大小。 array具有类型 int*(指向 int 的指针(,在您的平台上占用 8 个字节。sizeof运算符无法找出数组array指向的实际长度。返回值并不表示已分配了多少内存。

malloc()函数要么失败(在这种情况下它返回NULL(,要么成功,在这种情况下,它返回一个指向至少与您需要一样大的内存区域的指针。

相关内容

  • 没有找到相关文章

最新更新