在DLL中定义的全局变量和宿主软件的全局变量
global variable defined in a dll and global variable of the host software
如果我在应用程序加载的DLL中定义了一个全局变量,这个变量是否位于与应用程序中定义的其他全局变量相同的内存区域(因此不直接在DLL中)?
作为EXE的一部分加载的全局数据和作为DLL的一部分加载的全局数据都驻留在同一进程的虚拟内存空间中,尽管在这些EXE和DLL文件中定义的段对应于不同的区域。由于它们位于相同的虚拟内存空间中,DLL中的代码可以使用指向EXE传递给它的EXE全局指针,反之亦然。
答案是肯定的。MSDN报价:每个加载DLL的进程都将它映射到它的虚拟地址空间。去这个链接,你会找到你的疑问的答案。祝你好运
你的标签表明c++,但答案也可能是平台/操作系统相关的。在windows下,每个进程都会复制一份数据。以下是MSDN运行时行为文章中的一个片段:
每次一个新的进程尝试使用DLL,操作系统创建DLL的单独副本数据:这叫做进程附加。
在单个进程中全局数据是好的,…全球。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- 在 elf 文件中查找全局变量的位置
- 在DLL中定义的全局变量和宿主软件的全局变量