这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 memusage,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
memusage - 配置程序的内存使用情况
概要
记忆 [选项] ... 程序 [程序选项] ...
商品描述
记忆 是一个 bash 脚本,用于分析程序的内存使用情况, 程序。 它
预加载 libmemusage.so 库进入调用者的环境(通过 LD_预载
环境变量; 看 搜搜(8))。 这 libmemusage.so 库跟踪内存分配
通过拦截对 分配(3) 卡洛克(3) 免费(3), 重新分配(3); 可选地,调用
至 MMAP(2) 重映射(2), 蒙图(2)也可以拦截。
记忆 可以将采集到的数据以文本形式输出,也可以使用 内存状态(1)(请参阅
此 -p 选项,下面)创建一个包含图形表示的 PNG 文件
收集的数据。
内存 用法 摘要
输出的“内存使用摘要”行 记忆 包含三个字段:
堆 总
的总和 尺寸 所有人的论点 分配(3) 调用,参数的产物
(纳米*尺寸)的全部 卡洛克(3) 调用和总和 长度 所有人的论点 MMAP(2)
调用。 如果是 重新分配(3)和 重映射(2)、如果一个新的大小
分配大于之前的大小,所有这些差异的总和
(新尺寸减去旧尺寸)被添加。
堆 高峰
所有的最大值 尺寸 论据 分配(3)、所有产品 纳米*尺寸 of
卡洛克(3)、所有 尺寸 论据 重新分配(3) 长度 论据 MMAP(2),
新尺寸 论据 重映射(2)。
堆 高峰
在第一次调用任何受监视的函数之前,堆栈指针地址
(基本堆栈指针)被保存。 每次函数调用后,实际堆栈
读取指针地址与基栈指针的区别
计算。 这些差异的最大值则是堆栈峰值。
紧随此摘要行之后,一个表格显示了呼叫次数、总内存
分配或解除分配,以及每个拦截函数的失败调用次数。 为了
重新分配(3)和 重映射(2)、附加字段“nomove”显示已更改的重新分配
块的地址,附加的“dec”字段显示减少的重新分配
块的大小。 为了 重新分配(3)、附加字段“free”显示重新分配
这导致块被释放(即,重新分配的大小为 0)。
表输出的“重新分配/总内存” 记忆 不反映情况
重新分配(3) 用于重新分配一块内存以使其大小比以前更小。
这可能导致所有“总内存”单元(不包括“空闲”)的总和大于
“空闲/总内存”单元格。
直方图 阻止 尺寸
“块大小的直方图”将内存分配细分为各种
桶大小。
配置
-n 姓名, --程序名称=姓名
要配置文件的程序文件的名称。
-p 文件, --png=文件
生成PNG图形并将其存储在 文件.
-d 文件, --数据=文件
生成二进制数据文件并将其存储在 文件.
-u, --无缓冲
不要缓冲输出。
-b 尺寸, --缓冲区=尺寸
收集 尺寸 在写出之前的条目。
--无定时器
禁用基于定时器的 (信号专家) 堆栈指针值的采样。
-m, --mmap
还跟踪 MMAP(2) 重映射(2), 蒙图(2)。
-?, - 帮帮我
打印帮助并退出。
- 用法
打印一条简短的使用消息并退出。
-V, - 版
打印版本信息并退出。
以下选项仅在生成图形输出时适用:
-t, --基于时间
使用时间(而不是函数调用次数)作为 X 轴的刻度。
-T, - 全部的
还要绘制总内存使用量的图表。
--标题=姓名
使用 姓名 作为图表的标题。
-x 尺寸, --x-大小=尺寸
制作图表 尺寸 像素宽。
-y 尺寸, --y-大小=尺寸
制作图表 尺寸 像素高。
退出 状态
退出状态等于分析程序的退出状态。
例
下面是一个简单的程序,它以上升到峰值的周期重新分配一块内存
在此之前循环重新分配返回到零的较小块中的内存。
编译程序并运行以下命令后,内存图
该程序的用法可以在文件中找到 记忆.png:
$ 记忆 --data=memusage.dat ./a.输出
...
内存使用汇总:堆总:45200,堆峰值:6440,堆栈峰值:224
总调用次数 总内存失败调用次数
分配器| 1 400 0
重新分配| 40 44800 0 (nomove:40, dec:19, free:0)
钙调| 0 0 0
免费| 1 440
块大小的直方图:
192-207 1 2% =================
...
2192-2207 1 2% =================
2240-2255 2 4% ==================================
2832-2847 2 4% ==================================
3440-3455 2 4% ==================================
4032-4047 2 4% ==================================
4640-4655 2 4% ==================================
5232-5247 2 4% ==================================
5840-5855 2 4% ==================================
6432-6447 1 2% =================
$ 内存状态 备忘录.dat 记忆.png
曲目 资源
#包括
#包括
#define 周期 20
INT
主要(int argc,char *argv[])
{
内部 i, j;
int * p;
printf("malloc: %zd\n", sizeof(int) * 100);
p = malloc(sizeof(int) * 100);
for (i = 0; i < CYCLES; i++) {
如果 (i < 周期数 / 2)
j = 我;
其他
j——;
printf("realloc: %zd\n", sizeof(int) * (j * 50 + 110));
p = realloc(p, sizeof(int) * (j * 50 + 100));
printf("realloc: %zd\n", sizeof(int) * ((j+1) * 150 + 110));
p = realloc(p, sizeof(int) * ((j + 1) * 150 + 110));
}
免费(p);
退出(退出成功);
}
使用 onworks.net 服务在线使用 memusage