导论

程序是什么?数据结构+算法的一个组合,因此程序运算的效率和数据结构和算法息息相关了,那么数据到底是如何存储在内存中的呢?CPU是如何拿到数据的呢?是否像文件系统一样拥有一套自己的地址编制方式呢?

Ascill码表

一个键盘输入就是一个字节,一个字符也是一个字节
计算机存储根据电路原理存储0和1,但是复杂的字符和汉子是如何转换为0和1进行存储的呢?这里就得了解一下ASCIl编码机制了,Ascii编码占用一个字节,这一个字节通常可以表示一个字符或者一个键盘输入,具体可参照下表,同时通过下表可知一个键盘输入就是一个字节
数据存储基础

汉子编码

一个汉字在存储中根据不同的编码占用不同的字节,通常是2个字节或者3个字节
计算机中英文通过ASCILL进行很好的编码,那么汉子是如何进行编码的?一个汉子占用几个字节呢?先利用网站现有工具对汉子进行编码转化,如采用如下机制的编码则一个汉子占用两个字节,具体如下图:
数据存储基础
那么这个汉子在十六进制中体现为4位,转化为内存存储一共占用几位呢?利用现成工具查询知:
数据存储基础
另外在Linux系统中实验,通过UTF-8的编码机制可知一个汉子占用3个字节
具体验证如下:
数据存储基础

内存编制

内存中任意对象都拥有内存地址,对象最小存储单元为1字节,每个对象的存储地址又占用4个字节,因此在内存中即使存储1字节的对象,也得消耗4字节的存储地址,共计消耗5字节的存储空间
在磁盘的文件系统中可知每个文件拥有一个inode编号,inode编号即对应一个磁盘的物理具体位置,通过inode编号可以具体索引到磁盘的具体位置获取具体磁盘存储的数值,那么内存中具体又是如何存储的呢?cpu如何找到内存中的数据呢?实验证明也是通过内存存储地址,实验验证,众所周知在计算机编程中一切为对象,定义一个函数,查看函数所在的位置:
数据存储基础
将如上地址转化为二进制时见下图:
数据存储基础

相关文章: