【发布时间】:2010-11-14 16:30:42
【问题描述】:
正如here 所讨论的,静态变量存储在 .BSS 或 .DATA 段中。
如果静态变量位于动态链接库中的函数内部,则此内存存储在哪里?链接时是否在链接过程的 .BSS 或 .DATA 段中分配了此变量的存储空间?
【问题讨论】:
标签: c++ memory static shared-libraries
正如here 所讨论的,静态变量存储在 .BSS 或 .DATA 段中。
如果静态变量位于动态链接库中的函数内部,则此内存存储在哪里?链接时是否在链接过程的 .BSS 或 .DATA 段中分配了此变量的存储空间?
【问题讨论】:
标签: c++ memory static shared-libraries
静态变量将在 DLL 文件的 .BSS 或 .DATA 部分结束。链接到 DLL 的可执行文件可能甚至不知道它的存在。当 EXE 加载 DLL 时,系统会为其设置 DLL 的数据段,然后调用 DllMain()。这就是 DLL 静态数据出现并被初始化的时候。
【讨论】:
是的。不同种类的静态变量之间的区别是:
范围
动态初始化的初始化时间。
实现(注意 BSS 和 DATA 段是实现细节)通常是相同的。为了确保动态初始化的静态函数变量的正确初始化,一种方法是添加一个额外的布尔值,指示需要动态初始化。
【讨论】: