1、变量内存分析
1.1 内存模型
内存模型是线性的(有序的)
对于 32 机而言,最大的内存地址是2^32次方bit(4294967296)(4GB)
对于 64 机而言,最大的内存地址是2^64次方bit(18446744073709552000)(171亿GB)
1.2 CPU 读写内存
CPU 在运作时要明确三件事
存储单元的地址(地址信息)
器件的选择,读 or 写 (控制信息)
读写的数据 (数据信息)
如何明确这三件事情
通过地址总线找到存储单元的地址
通过控制总线发送内存读写指令
通过数据总线传输需要读写的数据
地址总线: 地址总线宽度决定了CPU可以访问的物理地址空间(寻址能力)
例如: 地址总线的宽度是1位, 那么表示可以访问 0 和 1的内存
例如: 地址总线的位数是2位, 那么表示可以访问 00、01、10、11的内存
数据总线: 数据总线的位数决定CPU单次通信能交换的信息数量
例如: 数据总线:的宽度是1位, 那么一次可以传输1位二进制数据
例如: 地址总线的位数是2位,那么一次可以传输2位二进制数据
控制总线: 用来传送各种控制信号
·
1.3 写入流程
CPU 通过地址线将找到地址为 FFFFFFFB 的内存
CPU 通过控制线发出内存写入命令,选中存储器芯片,并通知它,要其写入数据。
CPU 通过数据线将数据 8 送入内存 FFFFFFFB 单元中
1.4 读取流程
CPU 通过地址线将找到地址为 FFFFFFFB 的内存
CPU 通过控制线发出内存读取命令,选中存储器芯片,并通知它,将要从中读取数据
存储器将 FFFFFFFB 号单元中的数据 8 通过数据线送入 CPU寄存器中
1.5 变量的存储原则
先分配字节地址大内存,然后分配字节地址小的内存(内存寻址是由大到小)
变量的首地址,是变量所占存储空间字节地址(最小的那个地址 )
低位保存在低地址字节上,高位保存在高地址字节上
10的二进制: 0b00000000 00000000 00000000 00001010
高字节← →低字节
2、char类型内存存储细节
2.1 char类型基本概念
char是C语言中比较灵活的一种数据类型,称为“字符型”
char类型变量占1个字节存储空间,共8位
除单个字符以外, C语言的的转义字符也可以利用char类型存储
2.2 char型数据存储原理
计算机只能识别0和1, 所以char类型存储数据并不是存储一个字符, 而是将字符转换为0和1之后再存储
正是因为存储字符类型时需要将字符转换为0和1, 所以为了统一, 老美就定义了一个ASCII表
ASCII表中定义了每一个字符对应的整数
char ch1 = 'a';
printf("%i\n", ch1); // 97
char ch2 = 97;
printf("%c\n", ch2); // a
2.3 char类型注意点
char类型占一个字节, 一个中文字符占3字节(unicode表),所有char不可以存储中文
char c = '我'; // 错误写法
除转义字符以外, 不支持多个字符
char ch = 'ab'; // 错误写法
char类型存储字符时会先查找对应的ASCII码值, 存储的是ASCII值, 所以字符6和数字6存储的内容不同
char ch1 = '6'; // 存储的是ASCII码 64
char ch2 = 6; // 存储的是数字 6
练习
定义一个函数, 实现输入一个小写字母,要求转换成大写输出
评论