我想给终端分配更大的栈空间以编译c++程序,使用 ulimit -s 命令,但是它提示我不能超过 hard limit(65520kb),我也没有找到如何有效的修改 hard limit 的方式,请问这应该如何做到?(我目前找到一种替代的解决方式是在编译命令中添加 -Wl,-stack_size -Wl,0x10000000)
以及如何给终端分配更多的虚拟内存?我在代码中开了 1e6 个 vector<pair<int,int>> 使用 g++ 编译会报错。但使用 clang++ 不会。
我想给终端分配更大的栈空间以编译c++程序,使用 ulimit -s 命令,但是它提示我不能超过 hard limit(65520kb),我也没有找到如何有效的修改 hard limit 的方式,请问这应该如何做到?(我目前找到一种替代的解决方式是在编译命令中添加 -Wl,-stack_size -Wl,0x10000000)
以及如何给终端分配更多的虚拟内存?我在代码中开了 1e6 个 vector<pair<int,int>> 使用 g++ 编译会报错。但使用 clang++ 不会。
1 回答1.4k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
3 回答1.4k 阅读
2 回答829 阅读✓ 已解决
2 回答804 阅读✓ 已解决
2 回答778 阅读✓ 已解决
2 回答724 阅读
如果你的 ulimit hard limit 已经是系统限制了,而仍需要更大的栈空间,可以使用 ulimit 命令修改 soft limit,之后再使用 ulimit -s 来增加栈空间大小。soft limit 的值不能超过 hard limit 的值,仍可以提升软限制。具体命令为:ulimit -S -s 32768
这将把栈的软限制增加到 32768 kb,然后就可以使用 ulimit -s 增加栈大小了。至于如何给终端分配更多的虚拟内存,需要修改操作系统的虚拟内存大小限制。不过,这是一个底层系统设置,建议不要轻易修改,而是需要对系统有足够的了解。如果程序使用的内存太多而无法在默认内存配置下工作,可以考虑更改代码中的内存使用方式,例如使用队列等数据结构代替 vector,或者使用内存映射文件等技术优化内存使用。至于为什么使用 g++ 会报错,而使用 clang++ 不会,这可能与两个编译器的默认编译选项和内存分配方式有关。建议您查看各个编译器的文档,或者详细分析编译时的错误信息,以更好地理解这个问题。