【问题标题】:How to increment a C program's memory (RAM) using successive malloc function calls如何使用连续的 malloc 函数调用来增加 C 程序的内存 (RAM)
【发布时间】:2019-07-07 09:37:20
【问题描述】:

我正在写一个C测试程序,每隔一秒就连续调用一次malloc函数,目的是测试linux系统中运行的基于ARM的处理器的RAM限制,

我写了下面的代码,我之前在我的电脑(操作系统:ubuntu 16.04)上测试过,但是内存占用(VmRSS)并不是每秒都在变化,但我猜是每 10 秒一次,谁能解释一下原因?

FILE *trace;
int compteur=0;
char *var;
while (1)
{
    trace=fopen("trace.txt","a");
    compteur++;
    var=(char *)malloc(100000);
    fprintf(trace,"%d\n",compteur);
    fclose(trace);
    sleep(1);
}

我启动这个命令来检查程序的 RAM 占用情况

 cat /proc/prog_pid/status | grep "VmRSS"

预期结果:RAM 每秒增加 100K

实际结果:RAM 每 10+ 秒增加 1M

【问题讨论】:

  • malloc的实现可能会以大块的方式从系统中获取内存。
  • 操作系统不必每次都给它确切的内存量。对于执行大量小分配的程序来说,这将产生巨大的开销。相反,它可以只为程序提供一大块内存,然后在用完之前不必提供更多。
  • 每次进程 malloc() 都会得到一个内存管理单元分配给它的页面,页面大小取决于你的系统配置。在此页面中存在内存之前,它不会增加大小。一旦它再次需要超过这个分配的空间,它就会得到一个新页面。所以你看到了这种行为。
  • 分页和动态分配可以参考:ftp.gnu.org/old-gnu/Manuals/glibc-2.2.3/html_chapter/…
  • 获得内存限制比尝试耗尽它更明智的方法。以/proc/meminfo 为例。

标签: c linux malloc ram


【解决方案1】:

从一些 cmets 中,我发现 malloc 的实现可能会从系统中大量获取内存,并且操作系统不必每次都给它确切的内存量,通过写入 txt 文件,分配的字节数,我能够准确地确定内存限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多