我写了一个小的c代码片段,它使用malloc分配了大量的内存(比如说100MB)。一旦分配,它在每个页面的开头写入2个字节,在每个页面的末尾写入一个字节,以确保物理内存被调用。写完后,它会一直睡觉以确保分配的内存驻留在RAM中。
在一个单独的终端中,我在运行我的应用程序之前和之后记录“free”命令的输出。我看到free命令输出中的“free”参数没有太大变化。当我们malloc庞大的数据块时,究竟发生了什么。我期待free参数的值降低使用参数以增加。但它没有发生。我错过了什么。
简而言之,当我们一次malloc巨大的块并在分配的每个页面中写入几个字节时,是否会从可用的免费物理内存中分配?
答案 0 :(得分:1)
简而言之,当我们一次malloc巨大的块并在分配的每个页面中写入几个字节时,是否会从可用的免费物理内存中分配?
如果它被分配,它将从系统的虚拟存储器中分配,并且任何给定的分配页面可以在任何给定时间驻留在物理存储器中,也可以不驻留在物理存储器中。这就是虚拟内存系统的工作原理。当你的进程处于休眠状态时,属于它的内存是被分页的好选择,但很难预测它是否真的会被分页。