本文为笔记:来之朱有鹏互联网大讲堂。
关于内存,这个是个有意思的话题,一直以来似懂非懂,今天将成几个维度来理解这个问题。
首先这篇博客内容非常多,你需要一些时间来读它。
废话不说,正文开始。。。。
1、操作系统如何管理内存
先从操作系统角度讲:操作系统掌握所有的硬件内存,因为内存很大,所以操作系统把内存分成1个1个的页面(其实就是一块,一般是4KB),然后以页面为单位来管理。页面内用更细小的方式来以字节为单位管理。操作系统内存管理的原理非常麻烦、非常复杂、非常不人性化。那么对我们这些使用操作系统的人来说,其实不需要了解这些细节。操作系统给我们提供了内存管理的一些接口,我们只需要用API即可管理内存。
譬如在C语言中使用malloc free这些接口来管理内存。
例如windows的txt文本
裸机程序中需要大块的内存需要自己来定义数组等来解决。
2、什么是内存?
从逻辑角度来讲,内存实际上是由无限多个内存单元格组成的,每个单元格有一个固定的地址叫内存地址,这个内存地址和这个内存单元格唯一对应且永久绑定。
逻辑上来说,内存可以有无限大(因为数学上编号永远可以增加,无尽头)。但是现实中实际的内存大小是有限制的,譬如32位的系统(32位系统指的是32位数据线,但是一般地址线也是32位,这个地址线32位决定了内存地址只能有32位二进制,所以逻辑上的大小为2的32次方)内存限制就为4G。实际上32位的系统中可用的内存是小于等于4G的(譬如我32位CPU装32位windows,但实际电脑只有512M内存)
2的32次方 4G
2的10次方 1024 ==1K
2的20次方 1024*1024 ==1M
2的30次方 1024*1024*1024 ==1G
3、关键:内存编址是以字节为单位的 --这句话为什么加黑,因为特么重要
我随便给一个数字(譬如说7),然后说这个数字是一个内存地址,然后问你这个内存地址对应的空间多大?这个大小是固定式,就是一个字节(8bit)。
如果把内存比喻位一栋大楼,那么这个楼里面的一个一个房间就是一个一个内存格子,这个格子的大小是固定的8bit,就好象这个大楼里面所有的房间户型是一样的。
所以 32位地址
2的32次方 4G