对于 C++ 中大于 41260 的值,二维向量初始化失败
2D Vector initialization fails for values greater than 41260 in C++
我注意到当我增加方形二维向量数组的维数时,我开始得到
Process finished with exit code 137 (interrupted by signal 9: SIGKILL)
我很好奇为什么会发生这种情况,以及失败的第一个行数和列数是否可以给我更多信息(人们会期待一个或两个幂或其他东西......)。
好吧,我开始猜测,得出的结论是 N > 42160
开始出现错误,这意味着 N = 42160
仍然可以,但是 N = 42161
突然给出 SIGKILL
.
给出错误的整个代码:
size_t N = 41261;
std::vector<std::vector<int>> matrix(N, std::vector<int>(N));
std::vector<std::vector<int>> matrixCopy(N, std::vector<int>(N));
你知道那个号码吗?我做错了什么?
实际上您在堆栈中分配了非常大的向量(至少 42161 * 42161 * 4 字节=7.1 GB),这是因为您收到了 sigkill(我认为更像是 std::bad_alloc),因为您没有足够的内存我认为如果你在堆顶部分配它也会失败。您应该根据需要分配内存。我们在 OS 中有一个概念,如果程序要分配非常大的内存,它可能会导致系统的某些重要部分出现故障并导致系统崩溃,这就是 OS 将终止该程序的原因。
阅读OOM。
退出代码 137 内存不足,这意味着您的程序占用了太多内存,操作系统不得不终止它。
您可以减小大小,remove/replace 个您不需要的条目,或者自己分配和释放,以免程序占用太多 space.
我注意到当我增加方形二维向量数组的维数时,我开始得到
Process finished with exit code 137 (interrupted by signal 9: SIGKILL)
我很好奇为什么会发生这种情况,以及失败的第一个行数和列数是否可以给我更多信息(人们会期待一个或两个幂或其他东西......)。
好吧,我开始猜测,得出的结论是 N > 42160
开始出现错误,这意味着 N = 42160
仍然可以,但是 N = 42161
突然给出 SIGKILL
.
给出错误的整个代码:
size_t N = 41261;
std::vector<std::vector<int>> matrix(N, std::vector<int>(N));
std::vector<std::vector<int>> matrixCopy(N, std::vector<int>(N));
你知道那个号码吗?我做错了什么?
实际上您在堆栈中分配了非常大的向量(至少 42161 * 42161 * 4 字节=7.1 GB),这是因为您收到了 sigkill(我认为更像是 std::bad_alloc),因为您没有足够的内存我认为如果你在堆顶部分配它也会失败。您应该根据需要分配内存。我们在 OS 中有一个概念,如果程序要分配非常大的内存,它可能会导致系统的某些重要部分出现故障并导致系统崩溃,这就是 OS 将终止该程序的原因。
阅读OOM。
退出代码 137 内存不足,这意味着您的程序占用了太多内存,操作系统不得不终止它。 您可以减小大小,remove/replace 个您不需要的条目,或者自己分配和释放,以免程序占用太多 space.