mirror of
https://github.com/Aexiar/c.git
synced 2024-10-22 14:05:45 +02:00
2024年10月11日 11:17
This commit is contained in:
parent
6e29fcae27
commit
63e440e05e
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 84 KiB |
BIN
docs/notes/02_c-leap/07_xdx/assets/12.jpg
Normal file
BIN
docs/notes/02_c-leap/07_xdx/assets/12.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 59 KiB |
4
docs/notes/02_c-leap/07_xdx/assets/13.svg
Normal file
4
docs/notes/02_c-leap/07_xdx/assets/13.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 116 KiB |
@ -1290,6 +1290,26 @@ int main() {
|
||||
|
||||
#### 2.5.2.2 内存对齐
|
||||
|
||||
* 计算机的内存是以字节(Bytes)为单位进行划分的,理论上 CPU 可以访问任意内存地址上的字节数据。但是,实际情况并非如此。
|
||||
* CPU 是通过`地址总线`来访问内存的,一次能处理几个字节的时间,就命令地址总线读取几个字节的数据,如下所示:
|
||||
|
||||
![](./assets/12.jpg)
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> * ① 32 位的 CPU 一次可以处理 4 个字节的数据,那么每次就从内存读取 4 个字节的数据。
|
||||
> * ② 64 位的 CPU 一次可以处理 8 个字节的数据,那么每次就从内存读取 8 个字节的数据。
|
||||
|
||||
* 以 `32` 位的 CPU 为例,实际寻址的步长是 `4` 个字节,也就是只对编号为 `4` 的倍数的内存进行寻址,如:0、4、8、12 等,而不会对编号为 1、2、3、5 等的内存编号进行寻址,如下所示:
|
||||
|
||||
![](./assets/13.svg)
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> 好处:可以做到最快速度的寻址,既不会遗漏一个字节,也不会重复对一个字节进行寻址。
|
||||
|
||||
* 对于程序来说,一个变量最好在一个寻址步长范围内,这样就可以一次就读取到变量的值。如果要进行跨步长存储,那么就需要读取两次,然后再拼接数据,效率显而易见的降低。
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user