在Linux中使用C实现零RAM

在Linux中使用C实现零RAM,c,linux,ram,C,Linux,Ram,为了安全起见,如何将Linux中未使用的RAM归零?我写了这个简单的C程序,但我不知道malloc调用的RAM是否会在下一个循环中重用,或者是否会使用新的RAM。希望在几分钟后,整个RAM都已归零 #include <unistd.h> #include <stdlib.h> #include <string.h> int main(void) { char *a = NULL; // declare variable while(1) /

为了安全起见,如何将Linux中未使用的RAM归零?我写了这个简单的C程序,但我不知道malloc调用的RAM是否会在下一个循环中重用,或者是否会使用新的RAM。希望在几分钟后,整个RAM都已归零

#include <unistd.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char *a = NULL; // declare variable

    while(1) // infinite loop
    {
        a = malloc(524288); // half a MB
        memset(a, 0, 524288); // zero
        free(a); // free

        sleep(1); // sleep for 1 second
    }
}
#包括
#包括
#包括
内部主(空)
{
char*a=NULL;//声明变量
while(1)//无限循环
{
a=malloc(524288);//半MB
memset(a,0524288);//零
免费的;免费的
睡眠(1);//睡眠1秒
}
}

您不能将系统RAM归零。系统拥有它。如果你想运行一个将RAM归零的系统,那么你需要编写自己的操作系统

Linux已经有了一个内核进程,它使用空闲周期将内存归零,这样它就可以将内存交给请求它的进程


根据特定的
malloc
实现,您的循环可能为零,也可能不为零。如果您真的想编写您描述的流程,请直接使用
sbrk
,以确保在流程中循环内存。我打赌如果你检查一下,你会发现sbrk提供给你的每个字节都已经是零了。

我认为你需要编写一个内核模块来可靠地完成这项工作。然后,您仍然只能将未使用的页面归零。请注意,其他进程使用的页面将在分配时由内核自动清除


你想干什么?避免冷启动攻击?

只要你从不访问未初始化的内存,你就不必担心别人留下了什么。只要在归零之前从不释放内存,就不必担心留下了什么。

通常,在我的系统(2.6.36)上,我只需执行一段时间(1)malloc(),就可以释放所有未使用(但已分配)的内存;循环,并在它停止分配内存时终止它

sbrk
将始终为您提供零个初始化页面。我不知道Linux会这样做。你能提供一份推荐信吗?