Min*_*Kim 3 c++ linux multithreading kill openmp
int **something = new int *[N];
for(int n = 0; n < N; n++)
something[n] = new int[M];
#pragma omp parallel for
for (int n = 0; n < N; n++)
delete[] something[n];
delete[] something;
Run Code Online (Sandbox Code Playgroud)
我可以并行化这样的删除过程吗?
Linux 的 OOM 杀手在经过大量循环后杀死了我的进程。我试图找出内存泄漏的地方,但我找不到哪里。我不确定这些 for 循环删除过程是否运行良好。
这一般来说是没问题的。标准 (g)libc 堆必须是线程安全的;否则,根本不可能编写线程程序。也可以在一个线程上分配缓冲区并在另一个线程上释放它。
并行化堆分配不会给你带来很大的加速,但我怀疑你问的不是因为你想加速(取消)分配,而是因为你有一些其他并行代码恰好分配和释放一些缓冲区。
要查找泄漏,请尝试使用 valgrind 运行程序。
此外,请考虑malloc_trim(0);在释放大量内存后调用。这使得 glibc 将未使用的内存释放回操作系统,而不是保留所有内存以供以后分配。
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |