我尝试通过调用 mallac 将新内存分配给指针然后释放它来测试 malloc
和 free
,但 sizeof 返回的值根本没有改变。我认为当声明一个指针时,它会获得一些内存,这些内存由 sizeof
返回的值表示;当我调用malloc时,它的大小应该根据参数的值改变;最后当我调用 free 时,它的大小是 0。我敢打赌我的想法是不正确的。有人能帮我吗?
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char *p;
printf("size of p : %d\n", sizeof(p));
p = malloc(256);
printf("size of p : %d\n", sizeof(p));
free(p);
printf("size of p : %d\n", sizeof(p));
printf("Allocate new storage\n");
p = (char *)malloc(1);
printf("size of p : %d\n", sizeof(p));
return 0;
}
最佳答案
此类信息由操作系统内存管理器处理。 sizeof(p)
将为您提供实际指针的大小,sizeof(*p)
将为您提供它所指向的对象的大小,但不是实际大小动态分配。
通常,分配的内存在实际数据之前有一个小 header ,其中包含操作系统能够正确取消分配内存所需的信息,尽管它完全是实现定义的。这就是为什么您只需要指定要分配多少内存,但 free() 不需要它,内存管理负责处理它。通常您不会有任何访问权限,也不需要任何访问权限。
关于c - 解释 malloc、free 和对象大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113431/