首页 > 解决方案 > 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 而不会丢失内存(我只保留很短的时间)。不过,我不确定我是不是走运了,这实际上是违法的。

标签: c++windows

解决方案


推荐阅读