Когда именно DLL будет использовать другую кучу, чем исполняемый файл? - PullRequest
5 голосов
/ 10 января 2011

Я знаю, что если ваша DLL статическая связывается с другой версией среды выполнения, то она создает свою собственную кучу.Так же будет, если будет поручено сделать кучу.При таких обстоятельствах для DLL небезопасно удалять то, что выделено exe.В каких случаях это НЕ применяется (например, для DLL безопасно удалить то, что выделил exe)?Безопасно ли, если и exe, и статическая ссылка DLL на одну и ту же библиотеку времени выполнения?

Спасибо

, в принципе, есть ли способ, где кто-то, кто выделяет его, может просто сделать addEvent(new DerivedEvent(), FunctorDestroyClass());

Ответы [ 2 ]

2 голосов
/ 10 января 2011

Возможно, я читаю больше в вашем вопросе, чем там, но если вы хотите знать, как вы можете выделить и освободить память за пределами DLL, то вы можете использовать что-то вроде следующего:* Это может быть безопаснее (частичная попытка на будущее).Использование различных опций сборки для обеспечения безопасности распределения и освобождения через границы может привести к проблемам.

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

0 голосов
/ 10 января 2011

DLL получит свой собственный менеджер памяти, если вы статически связываете библиотеку времени выполнения.У вас есть 3 варианта: динамически связывать во время выполнения, всегда размещать и освобождать в одном и том же месте (DLL или исполняемый файл, при необходимости обеспечивая пересылку) или использовать сторонний распределитель памяти, который решает эту проблему.

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