您应该首先使用valgrind(调试潜在的难以发现的内存泄漏或不当行为)。不要忘记编译gcc -Wall -g
(然后,当它工作时,使用-Wall -O
);当然,改进你的代码直到没有给出警告。
您可能(如果算法适合)尝试(有用地)分配内存区域,例如 2 的幂,或 2 的幂的 3 倍 [也许减去 2 或 3 个字];至少尽量避免太多不同的随机分配大小。
您可能想尝试使用Boehm 的保守垃圾收集器- 即将您的所有内容替换malloc
为GC_MALLOC
(或GC_MALLOC_ATOMIC
&strdup
与GC_STRDUP
)、您的free
与GC_FREE
等...
至少出于测试目的,可能通过 bash ulimit内置函数使用setrlimit(2) 。你想要- 可能有(设置这些限制明智地避免 OOM 杀手,并使你的-call by - 在内存耗尽时失败)。RLIMIT_AS
RLIMIT_DATA
mmap
malloc
您可能希望使用接受-fsanitize=address的 GCC 4.8 进行编译。
您还可以实现自己的特定于应用程序的垃圾收集器(阅读该维基页面,它为您提供见解和术语);标记和紧凑算法将对抗碎片。
另请参阅有关内存碎片的问题。查看Plug工具。