一个程序会分配多少栈内存

How many stack memories will be allocated to a program

我有一个程序有 4 个项目作为它的依赖项(这意味着它必须加载 4 个 dll 到 运行 该程序)。OS 分配 4 个堆栈内存还是只分配 1 个将为整个程序分配堆栈内存,为程序分配多少堆栈内存?

这一切都取决于!您的项目可以是独立的应用程序或库:

  • 独立应用各有自己的栈
  • 库将链接到应用程序并且没有自己的堆栈

DLL是动态链接的库,所以遵循库与don't have their own stack.

的原则

但是应用程序可以有多个线程(例如 运行 函数在不同线程的库中公开)。每个线程都有其 own stack.

对于 Windows,堆栈的 default stack size is specified in the executable file header. The default stack reservation size used by the linker is 1 MB. Look at this SO question 默认为其他 OS。

请注意,程序中的线程数是动态的:您的程序可以随时使用标准 C++ 库或 OS 调用来创建或终止它们。但是如果您的代码使用它,您会注意到。这同样适用于流程,如果您的应用程序启动了一些。