gpt4 book ai didi

c++ - 我的程序是 "Killed"

转载 作者:IT王子 更新时间:2023-10-29 00:35:07 24 4
gpt4 key购买 nike

可能是由内核建议的 question .我想看看我为什么会被杀,比如暗杀事件发生的原因。 :)

另外,有什么办法可以让我的程序正常执行吗?


编年史

我的程序正确执行。然而,我们遇到了一个大数据集,1.000.000 x 960 float ,而我在家里的笔记本电脑无法接受它(给了一个 std::bad_alloc())。

现在,我在实验室里,在 9.8 GiB 的台式机上,处理器为 3.00GHz × 4,其内存是家里笔记本电脑的两倍多。

在家里,无法将数据集加载到存储数据的 std::vector 中。在这里,在实验室中,这已经完成,程序继续构建数据结构。

那是我最后一次听到它:

Start building...
Killed

实验室中的桌面在 Debian 8 上运行。我的程序按预期运行数据集的一个子集,特别是 1.00.000 x 960 float 。


编辑

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 +++

所以这告诉我们我的内存力不足,我猜想

最佳答案

在 C++ 中, float 是单个(32 位) float : http://en.wikipedia.org/wiki/Single-precision_floating-point_format

这意味着您正在分配(没有开销) 3 840 000 000 bytes 的数据。

或大约 3,57627869 GB..

让我们安全地假设 vector 的标题与数据相比毫无意义,并继续这个数字..

这是要建立的大量数据,Linux 可能会认为这只是内存泄漏,并通过终止应用程序来保护自己:

https://unix.stackexchange.com/questions/136291/will-linux-start-killing-my-processes-without-asking-me-if-memory-gets-short

我不认为这是一个过度使用的问题,因为您实际上在单个应用程序中使用了将近一半的内存。

但也许..考虑这只是为了好玩..您正在构建 32 位应用程序吗?如果它是 32 位构建,您将接近 2^32 (4Gb) 内存空间,您的程序可以寻址该内存空间..

因此,如果您分配了另一个大 vector ... bum bum bum

关于c++ - 我的程序是 "Killed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29747404/

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