Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc大量数据填充ram并观察自由参数_C_Linux_Memory_Memory Management_Malloc - Fatal编程技术网

malloc大量数据填充ram并观察自由参数

malloc大量数据填充ram并观察自由参数,c,linux,memory,memory-management,malloc,C,Linux,Memory,Memory Management,Malloc,我编写了一个小的c代码段,它使用malloc分配了大量内存(比如100MB)。一旦分配,它会在每一页的开头写入2个字节,在每一页的结尾写入一个字节,以确保物理内存被分配。写入后,它会永久休眠,以确保分配的内存驻留在RAM中 在一个单独的终端中,我在运行应用程序之前和之后记录“free”命令的输出。我在free命令的输出中看到“free”参数并没有太大的变化。当我们处理大量数据时,会发生什么。我希望free参数的值会下降,而used参数会上升。但这并没有发生。我遗漏了什么吗 简言之,当我们一次ma

我编写了一个小的c代码段,它使用malloc分配了大量内存(比如100MB)。一旦分配,它会在每一页的开头写入2个字节,在每一页的结尾写入一个字节,以确保物理内存被分配。写入后,它会永久休眠,以确保分配的内存驻留在RAM中

在一个单独的终端中,我在运行应用程序之前和之后记录“free”命令的输出。我在free命令的输出中看到“free”参数并没有太大的变化。当我们处理大量数据时,会发生什么。我希望free参数的值会下降,而used参数会上升。但这并没有发生。我遗漏了什么吗

简言之,当我们一次malloc巨大的块,并将几个字节写入分配的每个页面时,它会从可用的可用物理内存中分配吗

简言之,当我们一次malloc巨大的块,并将几个字节写入分配的每个页面时,它会从可用的可用物理内存中分配吗


如果已分配,则将从系统的虚拟内存中分配,并且分配的任何给定页面在任何给定时间都可能驻留在物理内存中,也可能不驻留在物理内存中。虚拟内存系统就是这样工作的。当您的进程处于休眠状态时,属于它的内存很可能会被调出,但很难预测它是否真的会被调出。

请补充您的问题:实际的命令输出;你到底质疑什么价值观;这正是你所期望的答案;为什么顺便说一句,你的麻烦可能是一大堆页面错误。任何操作系统都会对任何进程允许保留的物理页面数量施加限制,以便与您完全相同的(恶意…)程序(顺便说一句,我现在不称其为“恶意!”)不会因此占用太多资源并导致拒绝服务。@mikerobinson:在我的计算机上,mozilla始终使用大约20倍的内存。但也许你可以说这是“恶意的”Mozilla。。。科夫我们不需要去那里…;-)
free
的输出可能具有误导性。缓存的
中的一些内存已经可用,但没有垃圾回收。虽然没有垃圾收集并返回到空闲池,但这些数据可以立即重用。我使用在后台运行的shell脚本收集了一些统计数据,并将“cat/proc/meminfo”、空闲的vmstat变量捕获到文件中。然后,我将数据绘制成图形,我看到,当400MB内存被malloc'ed时,“cat/proc/meminfo”中的缓冲区将增加300MB,缓存的缓冲区将增加“100MB”。有点困惑。有人能解释一下吗?当物理RAM资源开始变得拥挤时,系统一直在“寻找要窃取的页面”。也许,其他人最近没用过的页面会被卷心菜覆盖。但是,也许不是!当您超过系统为“任何进程现在可能拥有的最大常驻页面数”设定的当前限制时,您的其中一个页面将被盗!(不允许您攫取“超过您的公平份额”)此限额将进行动态调整。