gpt4 book ai didi

c++ - Windows中动态链接库的属性(dll)

转载 作者:可可西里 更新时间:2023-11-01 10:34:41 25 4
gpt4 key购买 nike

根据 Microsoft(参见 this 中的第一点),一个 DLL 一次只能有一个自身实例在系统中运行,但是从我在其他在线地方(包括 SO 上的此处)阅读的内容来看,进程可以加载同一个 dll 的多个实例和 dll 中的只读数据可以使用内存映射技术共享,但每个进程都有自己的 dll 写入数据拷贝存储在自己的内存空间中。

此外,在同一链接的第二点,DLL 不能有自己的堆栈、内存句柄、全局内存等,但据我了解,因为可以导出多个函数和/或在一个dll,它们必须有自己的堆栈、文件句柄等。为什么不能将 DLL 中定义的全局变量视为使用全局内存?

我在用 C++ 工作。

最佳答案

以单数形式使用的 DLL 的上下文没有多大意义。为了更好地理解,将 DLL 与进程中加载​​的上下文结合使用。文档是正确的。作为 DLL 中代码/导出函数的一部分的线程将拥有它们的堆栈。进程有内存句柄、全局内存等,而不是单个线程。如果您在 DLL 中定义了一个全局变量,那么它在它映射到的进程的上下文中是全局的。如果一个 DLL 被映射到多个进程,那么每个进程都有它自己的全局变量。它是维护进程隔离/完整性的一部分(每个进程都有自己的内存区域、句柄表等)

HTH

关于c++ - Windows中动态链接库的属性(dll),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33643863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com