android - 如何释放ashmem

标签 android c android-ndk ashmem

分配和使用 ashmem 效果很好:

ashmemFD = open("/dev/ashmem", O_RDWR);
int ret = ioctl(ashmemFD, ASHMEM_SET_NAME, "vf");
ioctl(ashmemFD, ASHMEM_SET_SIZE, size);
ashmap = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, ashmemFD, 0);

但问题是,使用后取消映射就足够了,还是需要做更多的事情来再次释放内存?

munmap((void*) ashmap,size);

最佳答案

取消映射后,您需要关闭 ashmem 区域的所有文件描述符。

Ashmem 区域可以看作是由内核处理的基于内存的文件。只要其中一个有打开的文件描述符,它就会保留在内存中。

希望这有帮助。

关于android - 如何释放ashmem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24366603/

相关文章:

android - Android 11 上未检测到 NFC

c - 该程序中的内存是如何分配的?

java - Android NDK反编译 native 代码的可能性

androidx导航: Too many arguments for @NonNull public open fun

android - AWS SNS Android GCM - InvalidPlatformToken

c - 将一些流水线翻译成 C 代码

c - 我试图打开一个 .csv 文件并在 C 编程中将其作为数组中的字符串读取

android - 使用 Android-NDK-16.1 构建 FFMPEG-3.4 时出错

android - 没有与Android模拟器兼容的拆分APK

android - 奇怪的 NullPointerException 没有提示(微调器上数组适配器的数据为空)