在不调用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语言中没有抽象机,即语言的设计原则
在 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语言中没有抽象机,即语言的设计原则