计算机基础之变量在内存中的存储
CPU是通过三条总线与内存打交道的,分别是地址总线,控制总线和数据总线,地址总线用于寻址,控制总线用于CPU读写控制,数据总线用于传输数据。
假设地址总线有32条,那么可寻址的范围就是2的32次方,也就是2的32次方个内存单元,而每个内存单元都会有与之对应的不重复的内存地址,也就是内存编号,编号的起始索引由0开始,所以其编号最大值是2^32 - 1。
指针就是地址,指针变量就是地址变量,用于存放地址的变量,2^32 - 1= 4294967295这个数值刚好是int类型可以存放的最大数值,也就是4个字节可以表示的范围,所以说指针变量统一只占4个字节,这样的设计很合理,用十六进制表示其范围就是0x00000000 -----0xFFFFFFFF,这和它指向的对象占几个字节毫无关联。
一个int占4个字节,int i = 100;表示在内存中开辟了4个字节的空间用于存储100这个值,而100是以二进制形式存放在内存单元中的,100的二进制表示为00000000 00000000 00000000 01100100,假设被存储在编号为0x00000000到0x0000003这四个内存地址所对应的内存单元中,又假设以小端模式进行存储的,那么下图就可以具体体现100是如何被存储的
那么问题又来了,i所对应的内存单元地址是多少呢?是0x00000000 - 0x00000003中的哪一个呢?