Есть ли у EXE или DLL перемещенная память? - PullRequest
0 голосов
/ 10 ноября 2018

В Windows 10, Visual Studio 2017, у меня есть EXE, который динамически загружает DLL во время выполнения. Они оба написаны на C ++.

Как только DLL загружена, EXE вызывает заводскую функцию в DLL. Эта фабричная функция возвращает std :: unique_ptr .

// Function in the DLL.
std::unique_ptr<T> factory() {
   return std::make_unique<DerivedT>();
}

Как только EXE получает std :: unique_ptr, где находится эта память? это в куче DLL или в куче EXE? Может ли DLL быть безопасно выгружена, а EXE сохраняет память и впоследствии обращается к этой памяти?

Я провел простой тест (в рамках более крупной программы), и кажется, что я могу выгрузить DLL без потери памяти (я сохраняю ее только в течение короткого времени). Хотя я не уверен, что мне просто повезло, и это на самом деле незаконно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...