c - 使用 setrlimit 设置线程的堆栈大小

标签 c multithreading memory stack setrlimit

我正在使用一个库,该库使用默认的 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/

相关文章:

java - Java 多线程中不能使用 join()

swift - 将 UInt8(或类似类型)转换为 Int 是否违背了 UInt8 的目的?

C++如何在不复制数据的情况下添加和到数组?

c - 子进程死亡后,子进程中声明的所有指针都会被释放吗?

c - C 中的标识符和变量

c - 使用 Assembly 在 C 中添加

c - 我正在使用 Matlab 编码器开发 DLL。我需要为创建的 DLL 填写属性和详细信息,如版权、文件版本、产品名称等

c# - 线程安全单例 : why the memory model does not guarantee that the new instance will be seen by other threads?

c - 什么 child 不从其 parent 那里继承信号量调整(semop(2))是什么意思?

java - 确定哪个线程拥有监视器