根据这个问题中的建议,可能是由内核导致。我想知道为什么我被杀死了,比如暗杀发生的函数。
此外,有没有办法让我的程序正常执行?
编年史
我的程序可以正常执行。然而,我们遇到了一个大型数据集,1,000,000 x 960个浮点数,我家里的笔记本电脑无法处理(会出现std::bad_alloc()
)。
现在,我在实验室里,使用一个拥有9.8 GiB内存和3.00GHz × 4处理器的台式机,其内存是家用笔记本的两倍以上。
在家中,数据集无法加载到std::vector
中,数据存储在其中。在这里,实验室里成功地完成了这个任务,并继续构建数据结构。
那是我最后一次听到有关它的消息:
Start building...
Killed
实验室的桌面电脑运行Debian 8操作系统。我的程序在数据集的子集中(特别是1.00.000 x 960浮点数)表现正常。
编辑
strace
输出现已可用:
...
brk..
brk(0x352435000) = 0x352414000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
mmap(NULL, 134217728, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x7f09c1563000
munmap(0x7f09c1563000, 44683264) = 0
munmap(0x7f09c8000000, 22425600) = 0
mprotect(0x7f09c4000000, 135168, PROT_READ|PROT_WRITE) = 0
...
mprotect(0x7f09c6360000, 8003584, PROT_READ|PROT_WRITE) = 0
+++ killed by SIGKILL +++
这告诉我们我没有内存了,我猜测。
g++ -Wall -Wextra -g
编译您的程序,然后使用调试器gdb
和valgrind和strace
; 但是您的程序有错误。同时在网上搜索linux memory overcommit
. - Basile Starynkevitch