С++ с использованием std::vector через границы
Предполагая, что EXE и DLL используют один и тот же компилятор и версию STL. Если я использую std::vector в своем EXE и использую резерв для резервирования памяти. Затем я передаю его как ссылку на DLL.
Я делаю push_back в DLL, чтобы добавить элемент к моему вектору. Если я не превышаю фактическую емкость, это память нового элемента, выделенного в DLL или в EXE?
Ответы
Ответ 1
Это, как правило, плохая идея.
Когда вы вызываете push_back
, можно сделать копию любого объекта, который вы добавляете к вектору. Нет гарантии, что размер этого объекта (между прочим) будет таким же, как размер, зарезервированный в .exe через std::vector::reserve
. Оба двоичных файла могут быть скомпилированы с другой версией STL.
Ответ 2
Ни.
Он выделяется в пространстве виртуальной памяти процесса, код которого представляет собой комбинацию .exe
и .dll
.