gpt4 book ai didi

c - valgrind 显示的堆外程序内存消耗

转载 作者:太空狗 更新时间:2023-10-29 11:34:30 24 4
gpt4 key购买 nike

我的程序占用了大量内存。这是 valgrind massif 工具向我展示的内容:

--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
28 38,531,086,036 760,235,208 143,002,822 617,232,386 0

如您所见,额外部分比有用堆大几倍。

我应该怎么做才能减少这个额外的内存?做更少的分配?

这就是所谓的内存碎片吗?

操作系统:Linux 2.6。程序是用 C 编写的。它应该 24\7 工作并且它处理大量数据。

最佳答案

您是否分配了很多非常小的对象——比如说,只有几个字节?每个分配都有一定的开销(因为,例如,free 需要能够判断 block 有多大)。

这就是有时所谓的“内部碎片”,与“外部碎片”相反,“外部碎片”存在一定数量的未分配内存,但您无法使用它,因为它被分割成太小的 block ,您无法使用。 (malloc 永远不会返回非常小的 block 的另一个原因是因为这有助于减少外部碎片。)

如果您正在分配许多非常小的对象,您应该考虑单独管理它们,而不是在堆上单独分配它们。如果你做得对,这在其他方面也可能会更好(例如,改善内存局部性)。

关于c - valgrind 显示的堆外程序内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com