相关疑难解决方法(0)

C++ 测试两个 DLL 是否共享同一堆

众所周知,堆内存的释放必须使用与分配它的分配器相同的分配器来完成。在跨 DLL 边界交换堆分配的对象时需要考虑这一点。

一种解决方案是为每个对象提供一个析构函数,就像在 C API 中一样:如果 DLL 允许创建对象 A,则它必须提供一个函数A_free或类似的东西1

另一个相关的解决方案是将所有分配包装到其中,因为它们存储到释放器2shared_ptr的链接。

另一种解决方案是将顶级分配器“注入”到所有加载的 DLL(递归地)3中。

另一种解决方案是不交换堆分配的对象,而是使用某种协议4

另一种解决方案是绝对确保 DLL 将共享相同的堆,如果它们共享兼容的编译选项(编译器、标志、运行时等),则应该(将会?)发生这种情况5 6。这似乎很难保证,特别是如果人们想使用包管理器而不是立即构建所有内容。

有没有办法在运行时检查多个 DLL 之间的堆实际上是否相同,最好以跨平台的方式?

为了可靠性和易于调试,这似乎比希望应用程序立即崩溃而不是默默地破坏东西更好。

c++ dll memory-management heap-memory shared-libraries

10
推荐指数
1
解决办法
327
查看次数

DLL内存管理

我对Windows如何管理.dll的内存几乎没有疑问.

  • 当.dll加载到主机进程时,如何管理内存?

  • .dll是否可以访问主机进程可用的整个内存或只是其中的一部分?即,当.dll中的函数分配内存时是否存在限制?

  • STL类如dll使用的字符串,向量(动态增加存储)等,在这里没有问题吗?

c c++ dll memory-management

9
推荐指数
2
解决办法
8785
查看次数

新的和删除运算符重载为DLL

如何过载newdelete操作员dll.我已经将重载运算符写为dll的一部分,但是与此链接的客户端dll不使用overloaded new and delete

c++ window new-operator

4
推荐指数
1
解决办法
2593
查看次数