malloc申请内存空间后多了8个字节

xdx54321 2014-12-05 09:19:06
下面代码的作用是申请1000字节的内存空间,然后显示当前可用内存,再释放之,再显示当前可用内存。

memaddr =(int*) malloc(1000);
printf("释放内存前未使用内存空间大小为:%lu\n",coreleft());
free(memaddr2);
printf("释放内存后未使用内存空间大小为:%lu\n",coreleft());

那么,问题来了:
为什么前后地址相差1008,比申请的1000多了8个字节,试了好多个数字都是如此,总会多8个字节?
还有,怎样对返回的首地址值进行分析在内存的位置?比如哪页?
...全文
684 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
常书 2014-12-17
  • 打赏
  • 举报
回复
malloc分配内存时,实际消耗的内存总要大一些,因为要进行一些页管理
乾坤幻影 2014-12-17
  • 打赏
  • 举报
回复
引用 7 楼 wyscjm 的回复:
这个是有编译器决定的,
对头
老而不死 2014-12-11
  • 打赏
  • 举报
回复
这个是有编译器决定的,
老而不死 2014-12-11
  • 打赏
  • 举报
回复
我前几天看书,说了申请内存时,有可能申请的空间比你申请的大
buyong 2014-12-11
  • 打赏
  • 举报
回复
coreleft is an old function in my opinion. use /proc/meminfo file to check memory usage now.
zacharyLiu 2014-12-11
  • 打赏
  • 举报
回复
根据malloc内存分配对齐策略,在32位和64位系统上对齐单位分别为8字节和16字节
  • 打赏
  • 举报
回复
引用 2 楼 Cody2k3 的回复:
[quote=引用 楼主 xdx54321 的回复:] 下面代码的作用是申请1000字节的内存空间,然后显示当前可用内存,再释放之,再显示当前可用内存。 memaddr =(int*) malloc(1000); printf("释放内存前未使用内存空间大小为:%lu\n",coreleft()); free(memaddr2); printf("释放内存后未使用内存空间大小为:%lu\n",coreleft()); 那么,问题来了: 为什么前后地址相差1008,比申请的1000多了8个字节,试了好多个数字都是如此,总会多8个字节? 还有,怎样对返回的首地址值进行分析在内存的位置?比如哪页?
提供一个思路供楼主参考,malloc() 通常需要做一些book keeping的工作,一个很普遍的实现就是在return memory的前面allocate 几个byte,例如,free()并不需要知道release多少memory一样可以正确释放[/quote] that's what I thought as well. But, I am not sure how coreleft was implemented. Does it count the heap memory managed by malloc? coz technically, freeing heap memory managed by malloc is not considered as "freed" to the operating system...
Cody2k3 2014-12-07
  • 打赏
  • 举报
回复
引用 楼主 xdx54321 的回复:
下面代码的作用是申请1000字节的内存空间,然后显示当前可用内存,再释放之,再显示当前可用内存。 memaddr =(int*) malloc(1000); printf("释放内存前未使用内存空间大小为:%lu\n",coreleft()); free(memaddr2); printf("释放内存后未使用内存空间大小为:%lu\n",coreleft()); 那么,问题来了: 为什么前后地址相差1008,比申请的1000多了8个字节,试了好多个数字都是如此,总会多8个字节? 还有,怎样对返回的首地址值进行分析在内存的位置?比如哪页?
提供一个思路供楼主参考,malloc() 通常需要做一些book keeping的工作,一个很普遍的实现就是在return memory的前面allocate 几个byte,例如,free()并不需要知道release多少memory一样可以正确释放
故都 2014-12-06
  • 打赏
  • 举报
回复
你申请的时候是memaddr 释放的时候怎么变成了memaddr2了

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧