似乎为C程序或Ruby程序(使用C堆栈)设置堆栈大小的推荐方法是ulimit在Bash shell中使用.但
$ ulimit -s
8192
$ ulimit -s 16384
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
并sudo没有帮助.有没有办法将其设置为16MB,32MB或64MB?我认为应该有一种方法来设置每个程序调用,而不是设置系统范围的参数?
现在8192可能意味着8MB这是非常小的,如果将其与进程可以使用的数量进行比较,有时甚至高达2GB的RAM.
(更新的注释: ulimit -a可以显示其当前值).
(更新2:它实际上似乎ulimit -s <value>是每个shell,如果你第一次设置它,它通常会工作.问题是当你第二次设置它,然后它可能会返回一个错误)
我试图在 C / C++ 中声明一个大型 2D 数组(又名矩阵),但它仅在 Linux 上因段错误而崩溃。Linux 系统安装的 RAM 比 macOS 笔记本电脑多得多,但它只会在 Linux 系统上崩溃。
我的问题是:为什么只会在 Linux 上崩溃,而在 macOS 上不会?
这是一个重现该问题的小程序:
// C++ program to segfault on linux
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
cout << "Let's crash for no raisin! " << endl;
cout << "Int size: " << sizeof(int) << endl;
for (int n=1012; n < 2000; n++) {
cout << "Declaring Matrix2D of size: " << n << "x" << n …Run Code Online (Sandbox Code Playgroud)