Android NDK:当应用程序结束时,用malloc分配的内存会发生什么?

3
我有一些用C语言编写的例程,它们从NDK内部的Java类中调用。
在这些例程中,我只在开始时使用malloc来设置一些内部数组,这些数组稍后在对C例程的调用中使用。这些数组在C部分中全局定义,但在Java端没有链接或引用。
我的问题是,当我的应用程序关闭时,我是否需要释放这些内存,还是系统会自动释放它?我的意思是,系统是否知道这些分配是从正在被销毁的类中进行的,因此也会自动清除它,还是不是这种情况?

Java运行环境内存不足,无法继续执行。

无法创建GC线程。系统资源不足。

可能的原因:

系统物理内存或交换空间不足。

- CS QGB
2个回答

3
稍微补充一下Peter的回答,您的程序会向操作系统请求大块内存。这些块随后由您的程序用于分配特定数据结构的小量内存。操作系统不了解这些数据结构:类实例、数组或其他任何东西。
当您的程序终止时,操作系统仅将其提供给您的所有大块标记为“空闲”,以便提供给请求更多内存的任何其他程序。您的程序意识到的任何结构都变成了仅包含无意义数字的字节。

好的解释。自从我有了一切都在 ndk "后面" 而不是完全受控制的想法以来,我就不确定了,或者至少不知道它是如何工作的。 - Jordi C.
“无意义的数字”在将内存分配给下一个进程之前,通常应由操作系统清除。 - Andre Holzner

1
系统不知道类做了什么,也不需要知道。当你关闭一个程序时,系统会清理该程序使用的所有资源。这些资源是如何分配的,使用了哪些类等,系统并不需要知道。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接