我正在读取当进程终止时(通过任何方式)操作系统释放所有进程的内存,因此无需依次调用每个dtor。
现在我的问题是DLL或SO的内存如何与清理alloc'd内存有关?
我问,因为我可能最终会使用Java和/或C#调用带有一些静态C样式函数的C ++ DLL,这些函数将在堆上分配C ++对象。对不起,如果我厌倦了堆与堆栈线程,我觉得我已经忽略了 _ _ 堆的概念(即只有一个)。
使用库时内存泄漏的任何其他潜在缺陷?
答案 0 :(得分:1)
没有什么可以担心的。操作系统的加载器负责处理这个问题。
通常,共享库将通过内存映射(由加载器完成)使进程的地址空间可见,并且操作系统会跟踪仍需要给定共享库的进程数。每个进程单独需要的状态数据通常通过写时复制来处理,因此您的加密库可能不会意外地使用其他进程的密钥:-)简而言之,请不要担心。
编辑。也许你想知道如果你的库函数调用malloc()
并且没有清理会发生什么。好吧,库的代码成为你的进程的一部分,所以它实际上是你的进程请求内存,所以当你的进程终止时,操作系统会像往常一样清理。
答案 1 :(得分:1)
库加载后成为进程的一部分。关于整理内存,句柄,资源等,系统无法区分它们是在可执行映像还是库中创建的。