在不调用free()的情况下,用memset()写入的内存在内存中停留多久?

How long does memory written with memset() stay in memory without calling free()?

在 Linux。

你好。我确信 OS 只是在不调用 free() 的情况下简单地垃圾转储使用 memset() 分配的内存涉及很多因素,但我想知道是否有人对此有很好的估计?这就是我真正想知道的。

linux 中有一个称为 KSM 的功能,它通过合并匹配数据来节省内存 space。我的问题围绕着通过检查数据的写入时间来检测 KSM 是否正常工作。我已经在一台机器上成功地测试了这个,同时 运行 一切都在一个程序中。现在我想上传到内存,关闭程序,然后打开另一个程序并测试内存重复。

谢谢!

-泰勒

让我们谈谈抽象:

  • C 程序员为 "C abstract machine" 编写软件。这与任何真实硬件无关。

  • "C abstract machine" 被转换成以某种"process" 抽象运行的东西(例如可执行文件)。这个 "process" 抽象与任何真实的硬件无关(它使用 "threads" 而不是真实的 CPU,"virtual memory" 而不是真实的 RAM,"files" 而不是真实的磁盘 space, ...).

  • OS 在机器之上创建了 "process" 抽象。对于 KSM(其中 OS 在虚拟机中是 运行),此 "virtual machine" 抽象与任何真实硬件无关。

现在;让我们将 "abstraction" 定义为旨在保护人们免受现实影响的故意谎言(同时让我们将 "security vulnerability" 定义为谎言中的缺陷)。

判断任意时刻"memory in the C abstraction machine"与实际物理资源(RAM芯片、磁盘space等)的关系;你需要突破至少 3 个故意设计的障碍,以防止你知道这段关系。

  • memset 不分配内存,malloc 分配
  • 在空闲调用或进程终止之前,内存不会被释放
  • C语言中没有抽象机,即语言的设计原则