gpt4 book ai didi

c - Linux c 应用程序内存使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:48 24 4
gpt4 key购买 nike

我有一个 C Linux 应用程序,它使用 malloc、calloc、realloc 和 free 函数连续分配和释放内存(每秒大约 200 次分配/释放)。即使所有分配的内存都已释放(通过包装 *alloc 和 free 进行验证),VmSize、VmRSS 和 VmData 数量仍在增加,最终应用程序被 OOM killer 杀死。

为什么 VmSize、VmRSS 和 VmData 一直在增加?如果是内存管理问题,有什么建议可以避免这种情况吗?

我看到了这个Problem usage memory in C ,但答案并未解释 OOM 行为。

最佳答案

您应该首先使用 valgrind (调试潜在的难以发现的内存泄漏或不当行为)。不要忘记用 gcc -Wall -g 编译(然后,当它工作时,使用 -Wall -O );当然,请改进您的代码,直到没有给出警告为止。

您可能(如果算法合适)尝试(有用地)分配内存区域,例如2 的幂,或 2 的幂的 3 倍 [可能减去 2 或 3 个字];至少尽量避免分配太多不同的随机大小。

您可能想尝试使用 Boehm's conservative garbage collector - 即更换所有 mallocGC_MALLOC (或 GC_MALLOC_ATOMIC & strdupGC_STRDUP ),你的 freeGC_FREE等等……

至少出于测试目的,请使用 setrlimit(2)也许通过 bash ulimit内置的。你要RLIMIT_AS - 可能与 RLIMIT_DATA (明智地设置这些限制可以避免 OOM killer ,并使您的 mmap -由 malloc 调用 - 在内存耗尽时失败)。

您可能希望使用接受 -fsanitize=address 的 GCC 4.8 进行编译.

您还可以实现自己的特定应用程序 garbage collector (阅读该维基页面,它为您提供见解和术语);一个mark & compact algorithm将对抗碎片化。

另见 this question about memory fragmentation .查看 Plug工具。

关于c - Linux c 应用程序内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16584617/

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