免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: add358
打印 上一主题 下一主题

如何知道指针指向的内存的大小 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-03-08 13:56 |只看该作者
本帖最后由 fanasy 于 2012-03-08 13:58 编辑

malloc之后,被分配的内存大小,存储在返回地址之前几个字节内,但是各个系统之间应该格式不同。

论坛徽章:
0
12 [报告]
发表于 2012-03-08 13:58 |只看该作者

简单有效的办法就是你自己保存下malloc的参数size, 自己维护, 其它的任何办法即使能拿到大小, 也都是不合理的.

也就是说, 若只是给你一个指针, 你应该认为是无法知道它所分配的内存大小的.

论坛徽章:
0
13 [报告]
发表于 2012-03-08 13:59 |只看该作者
fanasy 发表于 2012-03-08 13:56
malloc之后,被分配的内存大小,存储在返回地址之前几个字节内。


调试的时候看大小不是申请的大小,似乎也不是malloc_usable_size的大小,要更多一点

论坛徽章:
0
14 [报告]
发表于 2012-03-08 16:25 |只看该作者
看一下malloc的源代码吧,是不是有线索

论坛徽章:
0
15 [报告]
发表于 2012-03-08 23:58 |只看该作者
这个不同的mm有不同的设计,你为什么要知道大小呢?
即便要知道,其大小就是你申请的大小,其他不可做任何假设。

ps.
一般libc的mm对有个8字节对齐,所以你申请1,其实给你的是8,但是你任然只可以放心的用1,因为8以及8以上的部分可能会有mm的状态在里面。

这个问题比较复杂,所以我建议你不要再纠结于此了,就想前面说的,你当,你申请多少,mm就给你的是多少就行。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
16 [报告]
发表于 2012-03-09 08:12 |只看该作者
对于另外的模块,应该要把指针和内存大小作为参数传进去吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP