【发布时间】:2014-06-29 19:28:39
【问题描述】:
答案可能因操作系统而异,但我很好奇线程通常预分配多少堆栈空间。例如,如果我使用:
push rax
这将在堆栈上放置一个值并增加rsp。但是如果我从不使用push 操作怎么办?我想一些空间仍然被分配,但有多少?另外,这是一个固定的数量还是随着pushed 的数量而动态增长?
【问题讨论】:
标签: multithreading macos assembly operating-system posix
答案可能因操作系统而异,但我很好奇线程通常预分配多少堆栈空间。例如,如果我使用:
push rax
这将在堆栈上放置一个值并增加rsp。但是如果我从不使用push 操作怎么办?我想一些空间仍然被分配,但有多少?另外,这是一个固定的数量还是随着pushed 的数量而动态增长?
【问题讨论】:
标签: multithreading macos assembly operating-system posix
POSIX 没有定义任何关于堆栈大小的标准,它完全取决于实现。由于您标记了此OSX,因此默认分配有:
当然,这些可以根据您的需要进行配置。分配是动态的:
辅助线程允许的最小堆栈大小为 16 KB,并且 堆栈大小必须是 4 KB 的倍数。这个内存的空间是 在创建线程时在您的进程空间中留出空间,但 与该内存关联的实际页面不会创建,直到它们 需要。
这里包含太多细节。我建议你阅读:
【讨论】: