我们假设有一个 32 位 CPU 和 2 字节short。我知道 4 字节int需要在 4 的倍数地址处对齐,以避免额外读取。
问题:
0x1读取。0x0那么,为什么 Shorts 需要以 2 的倍数地址对齐呢?0x2,为什么它会被认为是对齐和高效的,因为CPU只能从0x0读取并丢弃前两个字节?有一个问题与此非常相似,但是,答案仅告诉我们short结构体和独立变量中的对齐要求是相同的。还有一条获得 2 票赞成的评论说:
在许多机器上,当数量是 N 字节对齐时,访问 N 字节数量(至少是 {1, 2, 4, 8, 16} 中的 N)的效率最高。生活就是这样;习惯它,因为我怀疑芯片制造商会仅仅因为你认为它不应该是这样而改变它。
但为什么?
我知道在这篇文章中已经回答了一个类似的问题。但是,我仍然对 java 是否有保留循环问题感到困惑,因为 java 也有 WeakReference 类。那么,它们的目的是否相同?他们两个有什么区别?