谁清理用于存储堆栈的ram?

ליא*_*לוי -3 assembly operating-system

据我所知,我创建的每个变量都存储在内存中(ram或pagefile idc).

因此,当我将变量存储在特定的虚拟地址中时,它实际上将存储在实际内存中的某个位置.根据我的理解,应用程序不会直接清理堆栈 - 比如转到那些地址并将所有内容设置为零,它只会递增/递减堆栈指针,而另一个函数使用的内存可能会在以后重新使用不同的功能.这就是我们创建一个我们需要初始化它的局部变量的原因.

因此,应用程序本身不会转到ram中的那些地址并再次将其设置为零,所以我的问题是谁做了?所以下一个进程将能够再次使用这些精确的ram地址.

小智 8

在同一个程序中,通常没有人清理.堆上新分配的内存和堆栈上的新局部变量可以包含旧数据(如果没有以其他方式初始化).如果你不小心初始化它可能会导致间歇性的错误,或被黑客展示以揭示"秘密"数据.

当您启动新程序时,操作系统应负责清除内存.这通常内置于分页系统中:当您请求页面时,您应该将其归零.但是操作系统之间的细节差别很大.