我正在使用一个库,该库使用默认的 8MB 堆栈大小创建 pthread。是否有可能以编程方式减少库创建的线程的堆栈大小?我尝试在我的 main()
函数中使用 setrlimit(RLIMIT_STACK...)
,但这似乎没有任何效果。 ulimit -s
似乎可以完成这项工作,但我不想在执行程序之前设置堆栈大小。
有什么想法吗?谢谢
更新 1:
看来我要放弃使用 setrlimit(RLIMIT_STACK,...).
设置堆栈大小的能力了。我检查了常驻内存,发现它比虚拟内存少了很多。这足以让我放弃尝试限制堆栈大小。
最佳答案
我觉得你运气不好。如果您使用的库没有提供设置堆栈限制的方法,那么您将无法在创建线程后更改它。 setrlimit 和 shell 限制影响主线程的堆栈。
线程是在进程内存空间中创建的,因此在创建线程时会分配它们的堆栈。在 Unix 上,我相信堆栈将按需映射到 RAM,因此如果您不需要它(虚拟内存与常驻内存),您实际上可能不会使用 8 兆内存。
关于c - 使用 setrlimit 设置线程的堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019757/