小编use*_*750的帖子

为什么大小小于 CPU 字大小的数据需要以其大小的倍数对齐?

我们假设有一个 32 位 CPU 和 2 字节short。我知道 4 字节int需要在 4 的倍数地址处对齐,以避免额外读取。

问题:

  1. 如果 处存储了短路,CPU 仍可以在一次操作中0x1读取。0x0那么,为什么 Shorts 需要以 2 的倍数地址对齐呢?
  2. 如果一个short存储在0x2,为什么它会被认为是对齐和高效的,因为CPU只能从0x0读取并丢弃前两个字节?

有一个问题与此非常相似,但是,答案仅告诉我们short结构体和独立变量中的对齐要求是相同的。还有一条获得 2 票赞成的评论说:

在许多机器上,当数量是 N 字节对齐时,访问 N 字节数量(至少是 {1, 2, 4, 8, 16} 中的 N)的效率最高。生活就是这样;习惯它,因为我怀疑芯片制造商会仅仅因为你认为它不应该是这样而改变它。

但为什么?

c memory cpu-architecture memory-alignment

1
推荐指数
1
解决办法
332
查看次数

Java WeakReference 是否与 swift weak 关键字相同?

我知道在这篇文章中已经回答了一个类似的问题。但是,我仍然对 java 是否有保留循环问题感到困惑,因为 java 也有 WeakReference 类。那么,它们的目的是否相同?他们两个有什么区别?

java garbage-collection retain-cycle

0
推荐指数
1
解决办法
61
查看次数