系统级编程(一):内存的段页式管理
C++语言的强大之处就在于利用指针直接操作内存,从而得到超高的性能和非常灵活的编码方式。
所以,更加进一步的了解操作系统对内存的使用和分配是非常有必要的,这一部分不完全是C++/C语言的范畴,更多的是操作系统原理,或者是计算机体系结构知识体系的范畴。
内存寻址方式
在现代计算机的体系结构中,CPU只作为计算,而需要计算的值都保存在各级存储器中:
- 最快的为CPU自带的寄存器,比如一级寄存器,二级寄存器等。容量非常有限,到现在一般也是MB级别
- 内存,速度较寄存器慢一些,比硬盘快得多,一般来说现在是GB级别。
- 硬盘,最慢,存储量最大,而且是持久化存储。可以达到TB,PB甚至更大的数量级。
而CPU完成计算,就必须从这些存储器中获取数据来进行计算。在这些存储器中找数据的过程,就叫做“寻址”。
一般来说,在x86体系结构中(我们日常接触到的计算机基本上都是这个架构,手机的是arm架构,所以往后所有的内容都是基于x86架构这个前提),有如下的几种寻址方式:
- 立即寻址,指令的地址字段指出的不是操作数的地址,而是操作数本身,这种寻址方式称为立即寻址。立即寻址方式