在此代码段中
void main() {
void *p = malloc(300);
printf("%d",sizeof(*p));
free(p);
}
free如何知道它应该从void指针释放多少内存?
我想,如果有内部表/函数,它应该可用于查找任何类型对象的大小,而printf
的输出是1
答案 0 :(得分:3)
答案 1 :(得分:3)
malloc和free自己做隐藏的会计,这样他们就能做正确的事情。
sizeof()不使用此记帐信息的原因是sizeof()是编译时运算符,并且malloc / free信息在运行时才可用。
答案 2 :(得分:1)
这取决于实现。在我看过的一些系统中,它会在指针之前保留一些字节,其中包含保留块大小的信息,下一个内存空闲槽等。至于sizeof(void)
,这个未指定。
答案 3 :(得分:0)
malloc
的每个实现都有一个内部数据结构,表明它分配了多少个块。 free
和malloc
齐头并进,因此可以确切地知道要查找的位置。
有关详细信息,请参阅this Wiki article on Free List