【问题标题】:memory request Linux内存请求 Linux
【发布时间】:2018-02-19 01:06:59
【问题描述】:

我有一个发出内存请求的 c 程序。之后运行我的程序,我使用 free -g -t 命令查看使用的内存。程序调用了 malloc 函数,但它没有调用 free 函数。例如: 指针=malloc(900000000*sizeof(double)) 我认为调用会占用 ram 内存,但是当我使用 free 命令时,可用内存不会改变。大约6兆。我运行该程序很多次。程序不会释放内存,但释放的内存不会改变。 我认为空闲内存操作由c中的程序员负责。 我的程序比这复杂一些,但主要操作是这样的。

我不明白为什么空闲(和占用)内存没有改变。

【问题讨论】:

  • 在分配的内存上涂鸦。那应该最终分配它。 Linux 假设人们会过度分配并且懒于将内存提交给您的程序。
  • 我不确定我是否理解您的评论。你说 linux free 命令 show me 的输出没有更新吗?
  • 可能。我尚未正式进行过实验,但您的症状与我建议的诊断相符。
  • malloc() 确实分配内存。它分配地址空间。一旦被引用,内存将出现故障

标签: c linux memory memory-management


【解决方案1】:

正如 Jonathan Leffler 在他的评论中所说,malloc() 实际上并没有在 物理 内存中分配您要求的内存,当您使用内存时首先发生这种情况。如果您写入从 malloc() 获得的内存,那么您会看到“free”所看到的内存使用量将会增加。

来自注释下的malloc man page

默认情况下,Linux 遵循乐观的内存分配策略。 这意味着当 malloc() 返回非 NULL 时,不能保证 内存确实可用。

“free”报告物理内存使用情况,如free man page

中所述

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多