使用动态库(dll/dylib)进行内存管理
Memory management with dynamic libraries(dll/dylib)
在
应用程序中分配内存并在从dll/dylib调用的函数中释放内存是否有任何问题?
但是要从 dll/dylib 在函数中分配内存并在调用方应用程序中释放它?
对于静态库来说,这通常不是问题,但对于动态库来说通常不是一个好主意。特别是对于项目之间共享的库。
问题是您需要确保调用代码和动态库之间的内存分配函数(new/delete、malloc/free)完全匹配。 例如,如果您静态地将 C 运行时与可执行文件链接,但动态库是动态链接的(反之亦然),那么您将有单独的代码为可执行文件和动态库运行 malloc。
为了避免任何问题,动态库通常会公开自己的分配和自由例程以保证一致性。
不,从某种意义上说,它不会工作,但是执行内存分配的应用程序必须返回一个指针,然后可以将其传递给 DLL,以便它可以执行删除(或释放)。
当然,应用程序和 DLL 都必须使用与其他人指出的相同的内存分配,否则将出现混乱。
虽然很危险,而且容易出错。一般来说,最好在同一个地方处理内存分配和释放,并将指针传递给需要访问分配对象的任何其他内容。
我确实为一个 C# 库工作,该库调用了一个 DLL,该库分配内存以返回(大)结果,并提供一个删除方法,然后在应用程序完成它们时调用该方法。它工作正常。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- C++将字符串传递给 C 库以进行内存管理
- 从函数返回时C++内存管理
- 函数指针和 lambda 的内存管理
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- C++中的内存管理
- C和C++中的内存管理有什么区别
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 底层指针和内存管理
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- c++中的内存管理问题
- 使用矢量时的内存管理
- 循环和内存管理中的指针算术C++?
- C++堆栈内存管理问题
- C 内存管理中的课程如何管理 - 研究
- 不可变数据模型的内存管理
- C++ 使用数组初始化时的 STL 向量内存管理
- SFML 纹理内存管理