[英]malloc consumption much less than process itself
我正在使用gcc在C语言中开发哈希表。
对于冲突,我正在使用链表。
当我加载〜1 GB文件时,mallinfo()显示:
Total non-mmapped bytes arena = 1753260032
# of free chunks ordblks = 2
# of free fastbin blocks smblks = 0
# of mapped regions hblks = 1
Bytes in mapped regions hblkhd = 8003584
Max. total allocated space usmblks = 0
Free bytes held in fastbins fsmblks = 0
Total allocated space uordblks = 1753126384
Total free space fordblks = 133648
Topmost releasable block keepcost = 133072
如果我使用Excel计算内存消耗,则大约为2 GB,这与mallinfo()显示的1.7 GB相似。
同时,在top或htop中显示的linux进程使用5.7 GB。
尝试过jemalloc和tcmalloc,结果或多或少相似。 进程始终使用大约5.7 GB。
我知道malloc必须做一些空闲内存“片断”的链接列表或类似的东西,但是5 GB远远超过2 GB,即使内存块对齐了。
浪费的内存在哪里? :-)
在这种情况下,mallinfo()提供错误的信息。
当我在每1M分配之后添加mallinfo()时,我可以清楚地看到int是如何溢出,变为负值,然后再次溢出并再次变为正值。
Excel计算似乎也不正确。 我添加了用于分配内存计算的代码,结果约为4.7 GB。
顶部显示和实际消耗之间仍然存在1 GB的差异,但是这次可以通过分配器的内部数据轻松解释
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.