【发布时间】:2015-06-08 15:20:15
【问题描述】:
假设 EXE 和 DLL 使用相同的编译器和 STL 版本。如果我在我的 EXE 中使用 std::vector 并使用 reserve 来保留内存。然后我将它作为对 DLL 的引用传递。
我在 DLL 中执行 push_back 以将元素添加到我的向量中。如果我没有超出实际容量,新元素的内存是在 DLL 中还是在 EXE 中分配的?
【问题讨论】:
假设 EXE 和 DLL 使用相同的编译器和 STL 版本。如果我在我的 EXE 中使用 std::vector 并使用 reserve 来保留内存。然后我将它作为对 DLL 的引用传递。
我在 DLL 中执行 push_back 以将元素添加到我的向量中。如果我没有超出实际容量,新元素的内存是在 DLL 中还是在 EXE 中分配的?
【问题讨论】:
当您调用push_back 时,可以为您添加到向量中的任何对象制作副本。无法保证该对象的大小(除其他外)与通过std::vector::reserve 在.exe 中保留的大小相同。这两个二进制文件可能是使用不同版本的 STL 编译的。
【讨论】:
都不是。
分配在进程的虚拟内存空间中,其代码是.exe和.dll的组合。
【讨论】:
_get_heap_handle(),您将获得 same 返回的句柄(至少,这是我在测试中得到的)。我在答案中写了这个,但不幸的是这个问题(IMO错误地)关闭了,所以我在这里写评论。