python调用c库,c动态分配的内存储器怎样释放,求大神解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python调用c库,c动态分配的内存储器怎样释放,求大神解决相关的知识,希望对你有一定的参考价值。

参考技术A ctypes只能处C的dll,不能是C++的dll。先检查一下你的C程序是不是用C的compiler编译的。 另外,32bit的dll要32bit的python,64bit的dll要64bit的python。本回答被提问者采纳 参考技术B 照样调用c的free函数,或者封装的free函数 参考技术C 向大家工时费挂号信电饭锅

程序终止后动态分配的内存

【中文标题】程序终止后动态分配的内存【英文标题】:dynamically allocated memory after program termination 【发布时间】:2011-10-07 07:54:21 【问题描述】:

当包含动态分配内存(使用 malloc/new)而没有释放/删除调用的 C/C++ 程序终止时,动态分配的内存会发生什么情况? 操作系统会收回内存还是其他程序无法访问该内存?

【问题讨论】:

这称为内存泄漏。所以是的,内存对其他程序不可用。 @Sani:它称为内存泄漏,不,实际上,进程结束后内存不会保持不可用。 这个问题需要回答多少次? 【参考方案1】:

我不认为语言标准有任何保证,但支持稀疏虚拟内存和内存保护的现代操作系统(例如 MacOS X、Linux、所有最新版本的 Windows 以及所有当前制造的手机) 在行为不良的进程(当它们终止时)后自动清理并为您释放内存。但是,只要程序正在运行,内存仍然不可用。

如果您在微控制器、MacOS 9 或更早版本、DOS 或 Windows 3.x 上进行编程,那么您可能需要担心内存泄漏会导致整个操作系统永久无法使用内存。

【讨论】:

【参考方案2】:

大多数现代操作系统都使用内存管理器,所有用户级进程只能看到所谓的虚拟内存,它与程序可以检查的实际系统内存无关。这意味着程序不能简单地读取另一个进程的内存或内核内存。这也意味着内存管理器将在进程终止时完全“释放”已分配给进程的所有内存,因此程序中的内存泄漏通常不会“影响”系统的其余部分(除了可能强制大量的磁盘交换,可能还有一些“内存不足”的行为)。

这并不意味着可以轻松地处理内存泄漏,它只是意味着没有一个程序可以随意破坏现代多任务操作系统上的其他进程(尽管故意滥用管理权限,当然)。

【讨论】:

【参考方案3】:

简短回答:是的,操作系统将释放此内存。

大多数操作系统都会释放此内存,但是依赖此行为是不好的做法。某些操作系统不会释放此内存。例如,嵌入式系统。为了便携性,请始终释放您分配的所有内存。

【讨论】:

通常只有执行完成后 旧版操作系统是否也有空闲内存? @dragonwrenn:旧版操作系统(如果有的话)不会释放内存。任何现代系统都应该发布它。 现代操作系统(在本世纪和之前编写的)将在您的混乱之后清理。你的烂摊子在一个虚拟空间中,当你的程序结束时它就会消失。嵌入式系统是另一回事。许多人几乎没有可以称为操作系统的东西。【参考方案4】:

C/C++ 没有垃圾回收功能。如果您分配了内存并且没有释放它,那么在程序继续执行时它是没有用的。这称为内存泄漏。执行完成后,操作系统会收回此内存并再次可供使用。

【讨论】:

【参考方案5】:

在程序执行期间,你不能指望操作回收内存。这将是许多其他语言(例如 Java 和 C#)中的垃圾收集功能。虽然垃圾收集 c++ 是可能的,但我不相信任何主流实现都使用它。

另一方面,一旦您的程序完成执行,操作系统应该回收程序使用的内存。所以在执行期间内存仍然是禁区,但在程序退出后可以再次访问。

【讨论】:

以上是关于python调用c库,c动态分配的内存储器怎样释放,求大神解决的主要内容,如果未能解决你的问题,请参考以下文章

C++程序的内存分区,为什么要使用动态内存,动态内存的分配使用释放

解析PHP中的内存管理,PHP动态分配和释放内存

动态内存分配

使用 numpy/ctypes 公开 C 分配的内存缓冲区的更安全方法?

动态内存分配如何工作[重复]

c语言分配内存方式都有哪些