小编tic*_*chy的帖子

堆栈是如何初始化的?

当进程请求内存并且操作系统向进程提供一些新页面时,内核应该初始化页面(例如,使用零),以避免显示另一个进程使用的可靠数据.当进程启动并接收一些内存时也是如此,例如堆栈段.

当我在Linux中执行以下代码时,结果是大部分已分配的内存确实为0,但堆栈底部大约3-4 kB(数组的最后一个元素,最高地址)包含随机数.

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
    int * a = (int*)alloca(sizeof(int)*2000000);
    for(int i = 0; i< 2000000; ++i)
        cout << a[i] << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么它也没有设置为零?
  2. 可能是因为它被这个过程重用了吗?
  3. 如果是,那么早期使用那些3-4 kB内存的初始化代码是不是?

c c++ linux

15
推荐指数
3
解决办法
2270
查看次数

Linux 是否对页目录和页表使用自映射?

我只是问这个问题,因为我很好奇 Linux 内核是如何工作的。根据http://i-web.iu-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/02-VirtualMemory/VirtualMemory.ppt Windows 在其页目录和页表中使用特殊条目命名自映射,以便能够从内核虚拟地址空间操作页目录/表内容。如果有人熟悉 Linux 内存管理,请告诉我 Linux 内核是否以类似或不同的方式处理这个问题。谢谢。

paging operating-system memory-management linux-kernel

3
推荐指数
1
解决办法
4935
查看次数