引言:要想成为一名合格的开发者,掌握计算机系统工作原理是必须的,而在学这些之前应具有一门编程语言(汇编最好)的基础和一些计算机底层基础。本篇,我将从零开始一步步地探究高级语言底层逻辑和实现原理,希望对喜欢钻研的小伙伴们有所帮助。
一些数据类型的存储简单实现
注意,C语法在底层的具体实现并不是这样,很多较为复杂的机制细节以后逐步介绍。
字符型
所有字符型数据的存储大小为1个字节,例如,用C语法定义一个字符变量
char c1=‘A’;
在内存中定义一个字符变量可用以下汇编语法实现
c2 BYTE ‘a’
整数型
通常这一类型数据的存储大小与系统CPU操作位数有关,64位系统中,一般short型占2字节;int型占4字节;long型占8字节,在该环境下
short val1;
int val2=1024;
long val3=999999;
而在底层,可以这样建立这些变量
val1 WORD ?
val2 DWORD 1024
val3 QWORD 999999
指针型
什么,这里就到指针了?先不要慌,指针在底层中没那么复杂,这里只要知道它是数据的内存地址就行了。在同一个系统中,数据的内存地址存储大小是固定的,32位系统中为4字节,64位系统实际为6字节但编译器一般默认8字节。定义指针
int *p; //C语言定义一个整型指针
pr1 DWORD ? ;指定一个可存放32位地址的变量(内存地址空间)
pr2 QWORD ? ;指定一个可存放64位地址的变量(内存地址空间)
梳理总结
- 事实上,各数据类型的实现都依赖于系统内部数据类型(BYTE、WORD等),它们可存放存储大小一样的各种数据,也就是说对于内存中的数据,CPU只按内部数据类型的存储大小去访问。
- 我们所认识的各种各样的数据,源于人们对基本数据进行各种不同的操作处理。
- 内存中每个内存单元都对应一个唯一的内存地址,一个内存地址可指定任意一个数据,当这个数据存储空间大于内存单元时则会占用其他单元。