【问题标题】:How many stack memories will be allocated to a program将分配多少堆栈内存给程序
【发布时间】:2015-05-01 02:58:29
【问题描述】:

我有一个程序有 4 个项目作为依赖项(这意味着它必须加载 4 个 dll 才能运行该程序)。操作系统是分配 4 个堆栈内存还是只为整个程序分配 1 个堆栈内存以及如何将为程序分配多少堆栈内存?

【问题讨论】:

    标签: c++ visual-c++ dll operating-system computer-science


    【解决方案1】:

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

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

    DLL 是动态链接的库,因此它们遵循库和don't have their own stack 的原则。

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

    对于 Windows,default stack size 在可执行文件头中指定。链接器使用的默认堆栈保留大小为 1 MB。查看此SO question 以了解其他操作系统上的堆栈默认值。

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

    【讨论】:

    • 感谢您的宝贵回复。我还有一个问题。最多可以为全局变量分配多少内存。我知道全局和静态变量存储在数据段中,但该段是否具有固定内存像栈一样。我们可以声明一个具有大量内存的全局变量数组吗?
    • 这取决于 win32(2GB,如果使用 /LARGEADDRESSAWARE 编译并在 64 位窗口上运行,则为 4GB)或 x64 (8TB),请参见此处:msdn.microsoft.com/en-us/magazine/cc300794.aspx。这个内存是总地址空间=(静态+全局)+栈+堆+程序代码。这篇文章可能也让您感兴趣,以作大致了解:duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory
    • 感谢您提供有用的信息 :)
    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 2019-12-07
    • 2011-05-28
    • 2011-04-17
    • 2011-10-09
    • 2014-10-26
    • 1970-01-01
    相关资源
    最近更新 更多