【问题标题】:adding 32-bit aligned values result in 32-bit aligned?添加 32 位对齐的值会导致 32 位对齐?
【发布时间】:2016-12-18 15:59:06
【问题描述】:

说添加 32 位对齐值会产生 32 位对齐是否正确?假设一个 32 位对齐的数字会将 2 个次要位设置为 0,我会说是的。

【问题讨论】:

  • 如果可能的话,有人能告诉我们对齐值吗?
  • 如果阳光普照,那么阳光普照吗?不清楚你实际问的是什么。值没有对齐方式。
  • @Mark,我建议修改你的问题,即使有四个答案假设你的意图。更正问题将使以后遇到此问题的任何人都清楚。

标签: c alignment


【解决方案1】:

“值”不对齐,变量是。

但是,如果您添加两个 32 位宽的整数类型,则结果表达式也将是 32 位。确切的类型取决于操作数的实际类型。

如果您的意思是表示具有 32 位对齐的地址的两个值是否会产生相同的 ,答案是肯定的,假设每个字节 8 位。

这样的值可以被 4 整除,因此它的形式为 4*x 。所以如果你有两个这样的值,添加它们会给你4*a + 4*b == 4*(a+b)。所以结果也能被 4 整除。

但是请注意,添加两个指针是不合法的。但是,您可以将整数值添加到指针。

【讨论】:

  • 你的数学比我的更有意义。我一直在处理比特,以至于有时我会忽略表示同一事物的更简单的算术。
【解决方案2】:

假设您的意思是 32 位对齐地址...

如果整数变量addrA 包含一个 32 位对齐的地址,这意味着位 0 和 1 被设置为 0。如果 addrB 也是如此,那么无论高位如何,结果加法将也将位 0 ​​和 1 设置为 0。

所以,对你的意思做一些假设,是的,添加这两个 32 位对齐的地址总是会产生一个 32 位对齐的地址。

此外,由于我假设您指的是地址,因此要考虑的另一件事是,如果您对指针进行操作,则不能添加两个指针。如果一个是指针,一个是整数,则使用pointer arithmetic。

【讨论】:

  • 你可能已经抓住了 OP 的意图,但你不能在 C 中添加指针。(指针 + 整数,是的,但不是两个指针。)
【解决方案3】:

说添加 32 位对齐值会产生 32 位对齐是否正确?假设一个 32 位对齐的数字会将 2 个次要位设置为 0,我会说是的。

不,这是不正确的,因为对齐是存储的特性,而不是值。

【讨论】:

  • 什么是存储对齐?
  • @rondino,存储块的基本特征是它的(起始)地址和它的大小。如果一块存储的地址(以位为单位)是 32 的倍数,则它在 32 位边界上对齐。然而,通常我们以 8 位为单位表示地址和计数,其中的标准是地址是4 的倍数。
【解决方案4】:

算子+不产生内存对象,结果对齐没意义。

【讨论】:

    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多