在过去,当我处理长时间运行的C++守护进程时,我不得不处理堆碎片问题.保持我的大量分配池的技巧是必要的,以防止耗尽连续的堆空间.
这仍然是64位地址空间的问题吗?Perf对我来说不是一个问题,所以我宁愿简化我的代码而不再处理像缓冲池这样的事情.有没有人有关于这个问题的经验或故事?我正在使用Linux,但我想很多相同的问题都适用于Windows.
我的程序失败并显示“std::bad_alloc”错误消息。该程序是可扩展的,因此我使用 valgrind 在较小的版本上进行了测试,并且没有内存泄漏。
这是统计力学的应用,所以我基本上制作了数百个对象,更改它们的内部数据(在本例中为双精度的 stl 向量),并写入数据文件。对象的创建位于循环内,因此当循环结束时,内存将被释放。就像是:
for (cont=0;cont<MAX;cont++){
classSection seccion;
seccion.GenerateObjects(...);
while(somecondition){
seccion.evolve();
seccion.writedatatofile();
}}
Run Code Online (Sandbox Code Playgroud)
因此有两个变量决定程序的计算时间、系统的大小和运行次数。只有运行多次的大型系统才会崩溃。关于如何解决这个内存问题有什么想法吗?
谢谢,