首页 > 后端开发 > C++ > 全局变量和静态变量在不同操作系统的动态链接共享库中的行为如何?

全局变量和静态变量在不同操作系统的动态链接共享库中的行为如何?

Mary-Kate Olsen
发布: 2024-12-11 05:45:14
原创
857 人浏览过

How Do Global and Static Variables Behave in Dynamically Linked Shared Libraries Across Different Operating Systems?

共享库中动态链接的全局变量和静态变量

加载时动态链接

当应用程序通过加载时链接动态链接到模块 A 时,操作系统会加载DLL的代码和数据进入应用程序的地址空间。应用程序有自己的 A 全局变量和静态变量的副本,加载到其数据段中。

运行时动态链接

通过运行时动态链接,应用程序仅在需要时加载 DLL 的代码和数据。应用程序不会获得自己的 A 全局变量和静态变量的副本。相反,它直接从加载的 DLL 中访问它们。

可见性和范围

在所有情况下,静态变量仅在定义它们的模块内可见。然而,全局变量具有不同的可见性规则:

Windows:

  • 外部全局变量在定义模块之外不可见。
  • 要导出全局变量,必须在 DLL 中使用 __declspec(dllexport) 进行声明,在导入时使用 __declspec(dllimport) 进行声明。

类 Unix 系统:

  • 外部全局变量在加载时动态链接期间加载的所有模块之间可见并共享。 🎜>

多个应用程序

如果多个应用程序使用模块 A 和 B,则会为每个应用程序创建其全局变量和静态变量的单独副本,即使它们位于不同的进程中也是如此。

DLL 对应用程序全局变量的访问

DLL 无法直接访问它们所链接的应用程序的全局变量。为了操作应用程序的全局变量,DLL 必须使用应用程序提供的导出函数。

结论

动态链接共享中全局变量和静态变量的行为Windows 和类 Unix 系统之间的库有所不同。 Windows 强制模块之间的全局变量严格分离,而类 Unix 系统允许在加载时动态链接期间共享全局变量。一般来说,建议在使用共享库时避免使用全局变量。

以上是全局变量和静态变量在不同操作系统的动态链接共享库中的行为如何?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板