关于malloc函数后free内存空间的疑问
来源:互联网 发布:amazon.it 编辑:程序博客网 时间:2024/05/22 01:40
转自:http://www.myexception.cn/other/491341.html
关于malloc函数后free内存空间的疑问
2011年11月22日
问题:
malloc是开出内存空间。
现在我写了这么一句:
char *name;
name=(char *)malloc(len*sizeof(char));
name指针是个char指针,指向一个char数据,即只保留了一个char数据的长度信息.free的时候它如何知道开出的空间到底有多长?
解答:
(1)malloc是一个库函数,不是由操作系统提供的,绝大部分都是由编译器提供的库包自己实现的。malloc如何实现,依赖于不同的操作系统跟不同的c库。
比如,在linux上面,malloc是调用brk系统调用进行内存分配的,而在windows则是HeapAlloc等等类似的系统函数分配内存。
一般c库在初始化的时候都是一下子在堆中分配了一大部分内存,然后再根据自己的算法对这些内存进行分配。至于free怎么知道要free多少字节。其实很简单,因为每用malloc分配一个内存块,c库就要记住你分配的多少字节,一般情况下都是记在返回指针的前几个字节。
(2)c库记忆就是开辟额外的空间记录分配内存的大小,开辟额外的空间去记录分配内存的大小也只是一个权宜之计,也只是c库玩的一种把戏而已。微软的c库这么做,gcc的c库这么做,但不代表其他所有编译器的c库都这么做。所以,通俗的讲,或者更一般的讲,用c库记忆更具有一般性。
(3)比如char * buf1 = (char*)malloc (32);
那么buf1[-8]~ buf1[-1] 都是用来放管理信息的!特别是在windows下编程是如此.
buf1的管理结构(8bytes) | buf1真正可操作空间(32bytes) | 下一个空闲堆的管理结构(8bytes)|两个双链表指针(8bytes)
↑ ↑
Free()根据这里提供的 buf1真正指向这里
管理信息来回收内存
关于malloc函数后free内存空间的疑问
2011年11月22日
问题:
malloc是开出内存空间。
现在我写了这么一句:
char *name;
name=(char *)malloc(len*sizeof(char));
name指针是个char指针,指向一个char数据,即只保留了一个char数据的长度信息.free的时候它如何知道开出的空间到底有多长?
解答:
(1)malloc是一个库函数,不是由操作系统提供的,绝大部分都是由编译器提供的库包自己实现的。malloc如何实现,依赖于不同的操作系统跟不同的c库。
比如,在linux上面,malloc是调用brk系统调用进行内存分配的,而在windows则是HeapAlloc等等类似的系统函数分配内存。
一般c库在初始化的时候都是一下子在堆中分配了一大部分内存,然后再根据自己的算法对这些内存进行分配。至于free怎么知道要free多少字节。其实很简单,因为每用malloc分配一个内存块,c库就要记住你分配的多少字节,一般情况下都是记在返回指针的前几个字节。
(2)c库记忆就是开辟额外的空间记录分配内存的大小,开辟额外的空间去记录分配内存的大小也只是一个权宜之计,也只是c库玩的一种把戏而已。微软的c库这么做,gcc的c库这么做,但不代表其他所有编译器的c库都这么做。所以,通俗的讲,或者更一般的讲,用c库记忆更具有一般性。
(3)比如char * buf1 = (char*)malloc (32);
那么buf1[-8]~ buf1[-1] 都是用来放管理信息的!特别是在windows下编程是如此.
buf1的管理结构(8bytes) | buf1真正可操作空间(32bytes) | 下一个空闲堆的管理结构(8bytes)|两个双链表指针(8bytes)
↑ ↑
Free()根据这里提供的 buf1真正指向这里
管理信息来回收内存
- 关于malloc函数后free内存空间的疑问
- 关于malloc函数后free内存空间的疑问
- 关于 free() 函数用法的若干疑问
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc和free函数的用法
- 关于malloc函数和free函数的一些总结
- 关于C语言中的malloc和free函数的用法
- [转]:关于malloc和free函数的用法
- 关于malloc和free函数的用法 转载自清钟沁桐
- 关于malloc和free函数的用法(转)
- DuiLib 源码分析——UIManager
- 参数化查询‘(@UserName nvarchar(10),@NickName nvarchra(50)’ 需要参数 @NickName,但未提供该参数
- SQLSever2008未能加载文件mscorlib.tlb文件
- jQuery Uploadify在ASP.NET MVC3中的使用
- linux shell学习
- 关于malloc函数后free内存空间的疑问
- 算法的力量(李开复)
- 15款小应用源码
- 不要62
- Malloc内存泄露和内存越界问题的研究
- configure: error: xml2-config not found. Please check your libxml2 installation
- LeetCode : Search in Rotated Sorted Array
- ios软件
- 如何学习GLSL