文章预览
free() 函数只传入一个内存地址,为什么能知道要释放多大的内存? free()函数,要求传入的参数必须是malloc的返回值。在进行malloc函数申请内存时,操作系统实际会申请大于malloc要求的长度。 malloc分配的内存为一个个chunk,以下是一个典型的 malloc_chunk 结构定义(以 glibc 为例): struct malloc_chunk { size_t prev_size; /* 前一个内存块的大小(如果合并的话) */ size_t size; /* 当前内存块的大小,包括边界标记 */ struct malloc_chunk * fd ; /* 指向前一个空闲内存块的指针(用于空闲内存列表) */ struct malloc_chunk * bk ; /* 指向下一个空闲内存块的指针(用于空闲内存列表) */ }; prev_size 字段表示前一个内存块的大小(如果当前内存块与前面的内存块合并在一起)。size 字段表示当前内存块的大小,包括边界标记。fd 和 bk 字段分别表示指
………………………………