Figure 7. 线选法访问存储器
现用4块Figure 7中的存储器m。简单组成存储字长为32位(一行有32位)的存储器M,使此存储器的地址线有16根,重新编号为A0A1…A15。数据线32根,重新编号为D0D1…D31。为Figure 7中的存储块加一个片选信号。当给地址线一个值并给对应的片选信号时,就访问M的一个存储字长(某整行)、16位(连续的两个m被选中)、8位(某个m被选中)二进制串,再通过数据线输出就得到对应内存中的值。
在C语言程序中,假设有一个int类型(32bit)变量i,若它刚好被分配到M的某一行之上,则只需要往地址线A0A1…A15输一次i的地址就可以访问到i。若i的各字节被分配到相邻的两行之上(如两低字节在第一行,两高字节在第二行),则需要往地址线上先输入第一行的地址访问到i在第一行的内容,再往地址线上输入第二行地址访问到i在第二行的内容,再将两次访问的内容处理后才能得到i的内容。这就使得访问i需要访问M两次。
观察存储器M的结构(第一行地址为0),只要将变量的地址分配到此变量所占内存大小(以字节为单位)的整数倍上,那么此变量的所有字节都会处于内存M的同一行,只需要往地址线上输入一次地址即只访问一次主存就可以得到此变量。这样的地址被称为此变量的
边界。在C中使用结构体时,结构体内的元素(变量)的地址会被自动分配到其边界之上,这样的现象称为边界对齐(
内存对齐)。