对内存的一些感悟
(1)计算机程序 = 代码 + 数据
代码就是函数,数据就是全局变量、局部变量。
(2)冯诺依曼结构:将代码和数据存放在一起。哈弗结构:将数据和代码分开存放。代码是不变的(存放在ROM只读),数据是随时可变的(存放在RAM随机存储器),所以分开放的好处就可以方便数据管理,还可以避免代码被无意识修改导致的系统崩溃。
(3)在单片机中,程序代码放在ROM(flash)中,数据放在RAM中,单片机采用SRAM,SRAM不需要初始化就可以使用,DRAM需要先初始化再使用。
(4)内存在编程中天然是用来存放变量的,因为有内存,所以C语言才能定义变量。因此内存是用来存储可变数据的。
(5)内存单元的大小单位有4个,从小到大是:位<字节<字。位就代表二进制位。
(6)内存编制是以字节为单位。
(7)数据类型是用来定义变量的,而这些变量需要存储运算在内存中。所以数据类型必须和内存相匹配才能获得最好的性能。32位系统本身配合内存是32位,这样硬件配置最适合32位的int型变量,访问效率最高。同样也可以定义8位或者16位类型变量,但是实际上访问效率不高。
(8)说到数据类型就要想到两点:1.长度,2.解析方式。int a 的解读方法是:a实际是一个地址,由编译器自动分配该地址。例如这个地址是0,那么int 0就表示从地址0开始0,1,2,3都是该变量占的空间(长度),又因为内存编制是以字节为单位,所以也就是4字节(32位)。这0 1 2 3地址中存放的是一个Int型变量。
(9)一个函数的函数名字实际上也就是这段代码的首地址。
(10)定义结构体最基本的方法:
struct ages //定义结构体类型ages
{
int age1; //结构体成员1
int age2; //结构体成员2
};
/************定义完类型还得定义变量后才可以使用**************/
struct ages age; //定义变量age
/************这样就可以给成员赋值了**************/
age.age1 = 10;
age.age2 = 20;