[关闭]
@natsumi 2017-01-13T02:58:45.000000Z 字数 918 阅读 1895

【转】关于free如何知道要释放多少内存空间长度的问题

C


原文地址:
http://blog.163.com/hezhixiongbei@126/blog/static/73213307201542712252663

在C语言里动态内存申请和释放函数为malloc()和free()函数,其函数原型分别为:

  1. void *malloc( size_t size ); // 参数size为需要申请内存空间的数量
  2. void free( void* memblock ); // 参数memblock为需要释放内存的指针
  1. #include <stdlib.h>
  2. #define MEMSET 10
  3. int main(){
  4. int i;
  5. int *p = (int *)malloc(sizeof(int) * MEMSET);
  6. for (i=0; i<MEMSET; i++){
  7. *(p+i) = i;
  8. }
  9. free(p);
  10. return 0;
  11. }

内存监控

调试代码并调出内存监控器。可以看出malloc申请内存空间大小为:4*10=40个字节,申请的内存空间首地址为:0x00200F28,申请的内存块为红色区域的内存。在该内存块首地址前16个字节的位置有个【28】的数值,而0x28=40(十进制)。可以看出在内存首地址前16个字节处存放了申请内存块大小的数值。(当然实际上我不只是测试了这一组数据,测试结果都表明是首地址前的16个字节处存放了申请内存空间的数值)

通过调查free如何知道要释放多少内存空间长度的问题,我又发现了另一个问题,而该问题还需要进一步搜索资料和进行实践验证。
该问题是:通过malloc()函数申请40字节内存空间大小,实际上占用的内存空间大于40字节,那么申请40字节内存空间时,实际上占用了多少字节呢?

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注