专栏名称: Linux爱好者
伯乐在线旗下账号,「Linux爱好者」专注分享 Linux/Unix 相关内容,包括:工具资源、使用技巧、课程书籍等。
目录
今天看啥  ›  专栏  ›  Linux爱好者

free() 函数只传入一个内存地址,为什么能知道要释放多大的内存?

Linux爱好者  · 公众号  · linux  · 2024-08-23 14:31

文章预览

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 字段分别表示指 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览