C++跨越边界使用std :: vector

FSe*_*ert 10 c++ dll stl vector c++11

假设EXE和DLL使用相同的编译器和STL版本.如果我在我的EXE中使用std :: vector并使用reserve来保留内存.然后我将它作为DLL的引用传递给它.

我在DLL中执行push_back以向我的向量添加元素.如果我没有超过实际容量,那么在DLL或EXE中分配的新元素的内存是多少?

Lig*_*ica 0

两者都不。

它分配在进程的虚拟内存空间中.exe其代码是和 的组合.dll

  • 嗯,不。一般来说,DLL 使用不同的内存分配器,并且您不应该跨 DLL 边界传递资源。请参阅[跨 DLL 边界传递 CRT 对象的潜在错误](https://msdn.microsoft.com/en-us/library/ms235460.aspx) 以供参考。 (6认同)
  • @Mr.C64:即使在您指定的约束下,这个答案仍然是错误的:内存永远不会在虚拟地址空间中分配。它被分配在堆中,堆的内存被映射到所述地址空间。堆由相应的模块拥有。这种区别虽然重要,但在答案中却被完全忽略了。 (3认同)