malloc和free
来源:互联网 发布:江苏远洋数据有限公司 编辑:程序博客网 时间:2024/06/06 03:01
当用free函数释放malloc或者calloc申请的内存的时候
malloc(n,sizeof(int))
等释放的时候发现,释放的内存其实是大于n的,为什么是这样呢?
原来在一开始malloc申请内存的时候,申请的内存大小就比需要的打,在所申请内存的一开始记录着内存块的管理信息。也就是说malloc所申请的内存空间实际上有两个性质不同的空间,一个是用来记录管理信息的空间,一个是真正用来记录数据的空间。在C语言中,管理信息的空间是用结构体进行表示的
struct mem_control_block{ int is_available; int size; ... }
而free()函数释放内存空间的时候,这两种内存空间是都要释放的,free函数的关键代码如下面所示
void free(void *ptr) { struct mem_control_block *free; free = ptr - sizeof(struct mem_control_block); free->is_available = 1; return; }
最重要的是第二行,可以看出,free(ptr)中ptr实际指向的是内存空间,但是在free函数中,ptr要倒回到内存管理空间,从内存管理空间开始释放内存。从这我们也可以看出一定要保证ptr是指向数据内存空间的首地址,因为如果地址改变,free函数是无法释放内存的。这点已经经过验证。
0 0
- 关于malloc和free
- malloc() 和 free()
- malloc和free原理
- malloc和free原理
- malloc()和free()
- malloc()和free()
- malloc和free
- malloc()和free()
- 关于malloc和free
- malloc()和free()
- malloc()和free()
- malloc和free原型
- malloc()和free()
- malloc 和free 分析
- malloc和free
- malloc()和free()
- malloc()和free()
- 谈谈malloc()和free()
- POJ2886-Who Gets the Most Candies?-模拟约瑟夫环+反素数表(线段树上二分+爆搜打表)
- ios url 请求头添加参数及自定义cookie(转)
- java学习的网址
- 学习编程的七个阶段
- JqueryEasyUi
- malloc和free
- nmon监控数据分析
- 2016-03-03 道 法 儒
- Volley错误可能情况
- Spring读取配置文件的几种方式及依赖
- LASlib编译和配置LASlib (VS2013 release win7 64位)
- Leetcode Number of Digit One
- 设计模式之单件模式(Singleton)
- MySQL之设置数据库之间主主同步---主主同步,相互备份