【问题标题】:How do I implement malloc_trim(0) in ndk toolchains?如何在 ndk 工具链中实现 malloc_trim(0)?
【发布时间】:2021-08-04 13:05:40
【问题描述】:

因为ndk中没有malloc_trim函数,所以想想办法在ndk中实现malloc_trim(0)!

【问题讨论】:

    标签: android c++ linux android-ndk heap-memory


    【解决方案1】:

    如下所示的简单定义就足够了:

    int malloc_trim(size_t pad) { return 1; }
    

    最好还是看看你正在编译的库是否有一个标志来禁用malloc_trim。

    编辑:根据this post,jemalloc 是默认的内存分配器。 jemalloc 默认使用mmap,而不是sbrk。当满足某些条件时,Jemalloc 会自动将内存返回给操作系统,因此我不会费心尝试为 malloc_trim 提供有用的实现。

    【讨论】:

    • return 0 甚至是一个正确的实现。 “如果内存实际释放回系统,则 malloc_trim() 函数返回 1,如果无法释放任何内存,则返回 0。”
    • 但在 android-ndk 中没有名为 malloc_trim 的函数。你知道在使用 android-ndk 构建项目时如何释放堆中的内存吗?
    • 查看编辑:默认内存分配器不使用 sbrk() 并且在需要时已将内存归还给操作系统
    猜你喜欢
    • 1970-01-01
    • 2017-10-24
    • 2021-06-12
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2020-09-23
    • 1970-01-01
    相关资源
    最近更新 更多