C和指针 6.1内存和地址

缘起

《C和指针》 6.1节

分析

计算机的内存由亿万比特(bit)组成. 每个比特不是0就是1, 但是一个比特太小,没太大作用,所以许多现代机器上使用8个比特组成一个字节(byte,简称B)来使用,1B可以保存无符号的0~255或者有符号的-128~127,为了存储更大的值,我们把更多的B组成更大的内存单位. 例如许多机器使用字(Word)为单位存储整数,字一般由2B或者4B组成. 以4B为例,则可以容纳 无符号的0~42亿多(0~2^32-1)或者 有符号的-21亿多(-2^31)~ 21亿多(2^31-1).

尽管一个字有4B,但是其地址只有一个,至于它的地址到底是最左边的字节的位置还是最右边的字节的位置,不同机器有不同的位置. 另一个需要注意的是硬件的边界对齐——即在需要进行边界对齐的机器上,整型存储的起始位置只能是2或者4的倍数. 这些是硬件设计者的事情.

硬件总是根据地址去访问内存地址中的内容——即变量值,但是我们程序员不可能根据地址去访问变量. 所以就有了变量名,变量名和地址是对应的,注意变量名和内存地址之间的对应并不是硬件提供的,而是由编译器实现的.