You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS平台下C语言运行时获取空闲堆内存的方法咨询

macOS下C语言运行时获取空闲堆内存的方法

关于你提供的getrusage代码

你贴的这段代码无法获取空闲堆内存:

  • ru_maxrss字段表示的是进程自启动以来占用的最大物理内存(驻留集大小),是进程已使用的内存量,和堆里的空闲空间完全无关。运行这段代码输出的数值只会反映进程用过的峰值内存,不是当前空闲堆内存。

关于malloc_size(NULL)的说法

这个说法不属实:

  • macOS的malloc_size函数要求参数必须是之前通过malloc/calloc/realloc分配的有效指针,传入NULL属于未定义行为,不会返回堆的空闲空间大小。实际调用时可能返回0或者导致程序崩溃,完全不可信。

正确的实现方法

macOS的malloc库提供了专门的统计接口malloc_zone_statistics,可以获取堆的详细内存信息,包括空闲内存。示例代码如下:

#include <stdio.h>
#include <malloc/malloc.h>

int main() {
    malloc_statistics_t stats;
    // 获取默认malloc zone的统计信息
    malloc_zone_statistics(malloc_default_zone(), &stats);

    // 空闲堆内存大小(字节)
    printf("空闲堆内存: %llu bytes\n", stats.free_size);
    // 已分配堆内存大小
    printf("已分配堆内存: %llu bytes\n", stats.size_in_use);
    // 堆总大小
    printf("堆总大小: %llu bytes\n", stats.size_allocated);

    return 0;
}

编译运行时不需要额外链接库,直接用gcc编译即可:

gcc -o heap_stats heap_stats.c
./heap_stats

说明

  • malloc_default_zone()获取进程默认的堆区域,如果你用了自定义malloc zone,需要对应替换。
  • malloc_statistics_t结构体中的free_size字段就是当前堆里的空闲内存大小,包含了malloc库已从系统申请但未分配给用户的内存。

内容的提问来源于stack exchange,提问作者Luca Marchio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:40:06