- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先,对不起我的英语。
我知道体系结构非常复杂并且存在广泛的情况,但一个普遍的概括是如果计算机体系结构具有 32 位字,意味着寄存器、内存访问和总线使用 32 位长的字(但我认为当前架构中有很多变体)。
好吧,假设这是规则,我们的架构是小端架构,如 x86。在这种情况下,如果我们想读取一个 short int
(2 字节长),内存会读取包含我们的 short
的 4 字节字。假设包含单词 W 是 0xf1342ea0
,在内存中:
{a0, 2e, 34, f1} // a0 is the byte in the lowest address.
而我们的半字H在W的最高位,那么,H就是0xf134。我知道处理器从内存中接收到一个 short
移位的单词:
{34, f1, 00, 00}
因为 0x0000f134 等于 0xf134。
考虑到这幅图,既然处理器是 4 字节长,因此无论如何都需要移位,为什么 2 字节数据必须在 2 字节字边界对齐?
换句话说:
为什么鼓励建议不要读单词中的short
0xf134:
{ff, 34, f1, 0a}
?
编辑:表达相同疑问的另一种方式是:为什么对齐的定义是
A object of size N and address d is aligned if d is divisible by N.
而不是:
A object of size N and direction d is aligned respect to an architecture
of B bytes if d is divisible by B, or ⌊d/B⌋ == ⌊(d+N)/B⌋ if N < B.
?
注意:属性 ⌊d/B⌋ == ⌊(d+N)/B⌋ 表示对象属于对齐词。
最佳答案
如果内存是 { ff, 34, f1, 0a },那么对于 x86 处理器来说不是问题。但是,如果内存是 { ff, ff, ff, 34 } {f1, aa, aa, aa },处理器必须执行两个总线周期来检索 short 的值。 (另请注意,有些基于 RISC 的处理器根本不支持未对齐的访问。)
关于c - 读取 32 位架构中的短裤(例如),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22820576/
我将如何编写一段代码来与短片的第一个字节而不是第二部分? 例子:我有一个名为 inputShort 的 short,我希望这个 short 删除第二个字节中的所有值。所以我想用逻辑运算符将其与。 好吧
我写了一些使用字符串表示时间的代码,例如“0620”,但经过仔细思考后我意识到这些可以解析为短裤以比较性能和存储 yield 。 在单元测试中,我将一个短写为 0620 的值与返回值 620 进行比较
我是一名优秀的程序员,十分优秀!