Kir*_*rov 13 linux osx virtual-memory multithreading stack
例如,在 OSX 上,它甚至小于 512k。
考虑到应用程序不使用递归并且不分配大量堆栈变量,是否有任何推荐的大小?
我知道这个问题太广泛了,它在很大程度上取决于使用情况,但仍然想问,因为我想知道这个庞大的数字背后是否有一些隐藏的/内部/系统原因。
我想知道,因为我打算在我的应用程序中将堆栈大小更改为 512 KiB - 这听起来仍然是一个巨大的数字,但它比 8MiB 小得多 - 并且会导致进程的虚拟内存显着减少,因为我有很多线程(I/O)。
我也知道这并没有什么坏处,这里有很好的解释:pthreads 的默认堆栈大小
Ste*_*itt 17
正如其他人所说,并且正如您在问题中提供的链接中所提到的,拥有 8MiB 堆栈不会造成任何伤害(除了消耗地址空间 - 在 64 位系统上无关紧要)。
Linux 使用 8MiB 堆栈已经很长时间了;该更改于1995 年 7 月在内核的1.3.7 版中引入。当时它被视为引入限制,以前没有:
将堆栈限制为一些合理的默认值:如果需要,root 总是可以增加这个限制。8MB 似乎是合理的。
在 Linux 上,堆栈限制也会影响程序参数和环境的大小,限制为堆栈限制的四分之一;内核为参数和环境强制执行最少 32 页。
对于线程,如果堆栈限制 ( RLIMIT_STACK) 是无限的,则将pthread_create其自己的限制应用于新线程的堆栈 - 在大多数架构上,该限制小于 8MiB。
8MB 是堆栈的虚拟大小。当您的应用程序尝试使用比当前物理分配更多的堆栈时,就会发生页面错误。然后内核的页面错误处理程序将分配一个物理页面,然后您的应用程序将继续。
有关完整说明,请参阅https://unix.stackexchange.com/a/280865/21212 。
因此,减少堆栈大小不会对减少应用程序的物理内存使用产生任何影响。
| 归档时间: |
|
| 查看次数: |
8999 次 |
| 最近记录: |