C语言中,通过malloc()函数申请的内存,free()函数释放内存,只传入一个地址,为什么能知道释放多大的内存?
绿色方框中的buffer1头部信息如图4所示,只有一个0x31的值,其他都是0,0x31(十进制: 49), 49 = 32 + 16 +1,32字节是我们malloc()函数申请的大小,16字节是头部信息大小,还有1字节的偏移,所以free()函数拿到这块地址,根据头部信息才能正确的释放内存。图5绿色方框是buffer2的内存块头部信息,有一个值0x51(十进制:81),81=64 + 16 + 1,64字节是我们使用malloc()函数申请的大小,16字节是内存块头部信息,1字节的偏移。
原创
2023-03-04 18:08:44 ·
684 阅读 ·
0 评论