【发布时间】:2020-04-24 10:08:19
【问题描述】:
我正在研究 POSIX 线程,发现有一种方法可以更改堆栈大小;我仍然是通用操作系统的门外汉;那么拥有一个小堆栈有什么好处,我会在运行时节省内存吗?在嵌入式系统中输入?
【问题讨论】:
-
一个因素:每个线程都需要一个单独的堆栈。因此,较小的堆栈将允许更多的并发线程。虽然需要认真重新考虑任何具有如此多线程的应用程序的设计,这会成为一个问题。
-
当然,每个线程都有一个堆栈,在我见过的 linux 中,该堆栈默认为 8Mb。如果你把它变小,那么你会节省一些内存。除非您使用资源非常有限的嵌入式设备,否则我不会担心。这些天内存又便宜又充裕,我从来没有修改过堆栈大小。
-
在一个直到页面被触摸才分配的操作系统(如 Linux)上,拥有更大的堆栈很可能不需要任何成本。
-
请注意,给你的线程一个更小的堆栈并不是利用设置堆栈大小能力的唯一方法——你也可以使它更大。例如,如果您的线程使用许多大型的堆栈分配对象,这可能很重要。
-
@stark:这不是真的,并且错过了“分配”未定义。无论如何,必须立即分配虚拟地址空间,在任何现代 32 位系统上,这将成为限制因素。此外,如果启用了提交记帐(这样您就不会遇到意外的 OOM-killing),它也会按照提交的意义进行分配。那么,唯一没有“分配”的情况就是内存可以用作缓存,直到它(可能永远不会)需要作为堆栈。
标签: c operating-system pthreads posix embedded-linux