内存管理--内存的简介

来源:互联网 发布:ios阿里云 身份证识别 编辑:程序博客网 时间:2024/05/22 13:01

 

1.程序内存

32位机器具有4G的程序内存,这个内存并不是指实际的物理内存,而是虚拟内存这个虚拟内存并不是实际存在的。

2.虚拟内存

我们知道一个虚拟空间由一组页映射函数将虚拟空间的各个页映射至相应的物理空间,那么创建一个虚拟空间实际上并不是创建空间而是创建映射函数所需要的相应的数据结构,在i386 的Linux下,创建虚拟地址空间实际上只是分配一个页目录(Page Directory)就可以了,甚至不设置页映射关系,这些映射关系等到后面程序发生页错误的时候再进行设置。程序装入内存,实际就是映射到了虚拟内存。

3.内存中布局

wps84DC.tmp

栈:栈用于维护函数调用的上下文,离开了栈函数调用就没法实现。栈通常在用户空间的最高地址处分配,通常有数兆字节的大小。

堆:堆是用来容纳应用程序动态分配的内存区域,当程序使用malloc或new分配内存时,得到的内存来自堆里。

可执行文件映像:这里存储着可执行文件在内存里的映像。

保留区:保留区并不是一个单一的内存区域,而是对内存中受到保护而禁止访问的内存区域的总称,例如,大多数操作系统里,极小的地址通常都是不允许访问的,如NULL。通常C语言将无效指针赋值为0也是出于这个考虑,因为0地址上正常情况下不可能有有效的可访问数据。

原创粉丝点击