一、引子
作者、我在上班闲着没事的时候,看了一些关于Linux内存管理和程序装载、链接的文章,然后自己就总结出了一些东西。
本系列文章一方面将资料中的长篇大论总结到最少、以方便可以直接找到答案,一方面也是方便面试的时候可以吹牛逼。
Linux的内存管理模块是Linux内核中最复杂、最大的一块了。本系列将分为四方面来讲述:
1.程序在内存中分区,
2.ELF文件如何装载、加载,
3.内存管理的硬件架构分类,
4.内存空间管理。
二、内存分类
首先要先了解内存有几种,才能更好的了解内存管理。
1.物理内存
物理内存(Physical memory)是相对于虚拟内存而言的。物理内存指通过物理内存条而获得的内存空间。
常见的物理内存规格有2G、4G等,现如今随着计算机硬件的发展,已经出现8G、16G甚至更高容量的内存规格。
在应用中,自然是顾名思义,物理上,真实存在的插在主板内存槽上的内存条的容量的大小。
看计算机配置的时候,主要看的就是这个物理内存。
2.虚拟内存
虚拟内存是计算机系统内存管理的一种技术。
它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),
而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
本系列文章的前两方面如无特殊说明都是说虚拟内存。
三、程序在内存中分区
计算机按CPU位数不同可分为8位系统、32位系统、64位系统。本次介绍目前最常用的32位和64位系统的内存分区。
虚拟内存又分为用户态内存和内核态内存。
3.1用户态内存
3.1.1 32位系统
32位理论上最大能够使用的内存