【发布时间】:2015-07-09 17:50:53
【问题描述】:
我知道最大堆栈大小通常固定在链接上(也许在 Windows 上就是这样)。
但我不知道何时使用的程序堆栈大小(不是最大堆栈大小,只是使用的大小)被固定到操作系统。编译?链接?执行?
像这样:
int main(){ int a[10]; return 0;}
程序只使用 10 * sizeof(int) 堆栈。那么,堆栈大小是固定的吗?
最重要的是。 malloc 或 free 时堆大小是否改变?
【问题讨论】:
-
它是由操作系统在进程执行时分配的。
-
FWIW,栈 size 不固定,它在运行时根据需要扩展,但栈 limit 是固定的。
-
如果您的程序只使用 40 字节的堆栈(加上运行时系统的更多字节)并且操作系统默认为进程分配 8MB 堆栈(就像 Linux 一样),您仍然有剩下将近 8MB 堆栈。
-
IMO 这个问题非常不清楚。考虑将这些问号中的每一个放在适当的位置,即在格式良好且易读的问题的末尾。例如,“so”不是问题,“if the size if fixed”也不是问题。
-
嗯...“所以,如果大小是固定的”也不是问题!!!