С++ с использованием 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.