Linux malloc 返回“真实”内存

Linux malloc return "real" memory

提问人:Nick 提问时间:7/25/2023 最后编辑:Nick 更新时间:7/26/2023 访问量:94

问:

在 Linux 中,如果你使用内存和不使用内存,内存就不是“真实的”。malloc

如果你这样做,这可以很容易地测试。malloc(some_really_big_number)

然后,如果程序开始使用内存,Linux 将开始进行实际分配,这可以在 Linux 进程管理器中看到,如果没有足够的内存,Linux 将在磁盘上交换。top

有没有简单的方法可以在调用后立即分配和返回真实内存(如果系统开始交换,malloc 应该等待交换完成)malloc

更新

尝试以下操作,它可以工作:

  • 内存
  • 将每 1024 个字节设置为 0 - 比 memset 快,但不会太多
  • 将每 4096 个字节设置为 0 - 与上一个相同

尝试以下操作,但不起作用:

  • 卡洛克
  • mlock - 在 Stack Overflow 的某个地方阅读它
  • 将最后一个字节设置为 0
C Linux 马洛克

评论

5赞 Thomas Jager 7/25/2023
我相信,除了其他相关标志之外,您应该能够使用 ,而不是使用 。mallocmmapMAP_POPULATE
2赞 Andrew Henle 7/25/2023
@IngoLeonhardt我很确定我在这里至少看到了一个问题和答案,记录了在 Linux 上经过优化,实际上不必将内存设置为零,因为可以知道内存是新分配的,因此已经为零。这意味着不一定强制创建映射。现在,如果我能找到它......calloc()calloc()
1赞 Eric Postpischil 7/25/2023
@AndrewHenle:创建映射需要一些时间,但不会像完整的 .memset
2赞 John Bollinger 7/25/2023
Linux 将这种行为描述为一种功能,而不是一个错误。对此的看法确实各不相同,但在您着手解决它之前,您应该考虑这是否是您真正需要或想要解决的问题。
1赞 Andrew Henle 7/25/2023
@EricPostpischil 调用大量内存。定时通话。安排第二次通话的时间。第一次调用可能比第二次调用花费大约一个数量级的时间。如果系统的虚拟内存管理繁忙,则可能会更多。malloc()memset()memset()

答: 暂无答案