实际获得的动态分配内存的大小怎么确定
《c 和 指针》 中提到
动态分配内存时,malloc实际分配的内存有可能比你请求的要多一些
那么,怎么确定实际分配内存的大小?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
《c 和 指针》 中提到
动态分配内存时,malloc实际分配的内存有可能比你请求的要多一些
那么,怎么确定实际分配内存的大小?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
知乎上我有看过:
见:https://www.zhihu.com/questio...
实际分配的内存比请求的多多少标准中并没有规定,依赖于
malloc
的实现,这属于开发者不必关心的实现。没有万能的办法。因为这属于内存分配器的实现细节。你非要知道,得去看你所使用的内存分配器是怎么分配内存的。
CSAPP中有讲到这一部分,不仅会多出记录大小的头,还会因为进行对齐操作而获得比申请更多的内存
操作系统是需要知道每个指针分配了多少内存的,我们在调用delete的时候也没有告诉操作系统这个指针只想的区域占用了多少内存,所以肯定有一个地方保存着这个值,而这个值在不同的操作系统有不同的实现,比如最简单的一种实现就是在每个指针前面一个字节用来保存内存分配的长度,一般操作系统都会提供一个函数来获取这个实际内存的大小,比如malloc_size之类的函数。
如果你有兴趣可以看看redis源码,zmalloc.h和zmalloc.c
https://github.com/antirez/re...
还可以了解一下 tcmalloc 和 jemalloc 的实现