c++ - EXE 或 DLL 是否拥有移动的内存?
问题描述
在 Windows 10、Visual Studio 2017 中,我有一个在运行时动态加载 DLL 的 EXE。它们都是用 C++ 编写的。
加载 DLL 后,EXE 会调用 DLL 中的工厂函数。这个工厂函数返回一个 std::unique_ptr < T >。
// Function in the DLL.
std::unique_ptr<T> factory() {
return std::make_unique<DerivedT>();
}
一旦 EXE 收到 std::unique_ptr,这个内存在哪里?它是在 DLL 的堆中还是在 EXE 的堆中?DLL可以安全卸载,EXE保留内存,之后再引用这个内存吗?
我做了一个简单的测试(在一个更大的程序中),似乎我可以卸载 DLL 而不会丢失内存(我只保留很短的时间)。不过,我不确定我是不是走运了,这实际上是违法的。
解决方案
推荐阅读
- php - 使用个性化内容编辑 Wordpress 侧边栏
- authentication - 页面加载时基于角色的 Blazor 授权
- amazon-web-services - 部署无服务器应用程序时策略格式错误
- node.js - 如何以角度获取登录用户的 ID(MONGODB,后端的 NODEJS)
- python-3.x - Python损坏pptx文件
- javascript - 将选择类和输入类组合在一起
- arrays - Numpy 在所有元素之间制作产品,然后插入三角形二维数组
- javascript - 调整大小时,Bootstrap 4 轮播字幕消失
- java - 如何使用地图修改流中的现有元素?
- swift - 当 ForEach 循环中的元素更新 swiftui 时,将用户保持在当前滚动位置