C++ using std::vector across boundaries
assuming EXE和DLL是编译和使用的STL版本。如果我使用std::向量和使用在我的文件到备用内存区。然后,我把它的DLL的参考。
我推回到_ DLL添加到我的一元向量。如果我不超过目前的能力,是新分配的内存单元中的DLL或EXE中吗?
- 相关:msdn.microsoft.com/en-us/library/ms235460(v=vs.110).aspx
这通常是个坏主意。
当您调用push_back时,可以复制您要添加到向量中的任何对象。不能保证该对象的大小(除其他外)与通过std::vector::reserve在.exe中保留的大小相同。这两个二进制文件可能是用不同版本的STL编译的。
- 好的,我明白,但assuming is the矢量能力的限制和足够大的binaries about(compilator settings,图书馆,遇见了,是……)。恩好的我(that is to view在记忆点)?在其他的话,如果DLL is that the释后,仍然存在与is is the accessible日期?
- assuming一切运输卡车perfectly,措施。不管一个人多还是坏主意en is the things DLL在边界通行证。你应该寻找在不同溶液共享信息You need。(IE,茶茶和DLL向量分配一个参考Return to the)。
两者都不。
它被分配到进程的虚拟内存空间,其代码是.exe和.dll的组合。
- 嗯,没有。DLL uses -通用-在不同的内存分配器,和你should not通资源DLL在边界。EEA的潜在错误的对象通过在CRT的DLL boundaries for reference。
- 如果一个DLL是both the and the新建with the same VC++编译和链接dynamically and settings to the same CRT风味(which is constraining知道甚是我lightness),那么答案是正确的。如果你建立一个DLL和测试和呼叫_get_heap_handle()from each one,get handle returned the same你(至少,这就是我在我的测试)。我的写作,但不幸的是他/她在安的问题的答案,我知道闭(海事组织incorrectly),我在这里评论的写作。
- "即使你mr.c64以下约束:the name,this is wrong is回答:我从来没有在虚拟内存地址空间allocated茶。它是存储在堆中allocated mapped说,谁是在地址空间。respective by the is the堆制模。这一区分,而重要的是,altogether missing from the回答。