用于XOR运算的4字节字对齐

时间:2009-12-20 06:58:37

标签: c memory alignment micro-optimization xor

对字边界进行按位运算有什么好处吗?这样做的任何CPU或内存优化?

实际问题: 我正在尝试创建两个结构的XOR。假设结构-1和结构-2都具有相同大小的10000字节。我按原样保留前几百个字节,然后启动1和2的XOR。 让我们说我从302开始。这将一次占用4个字节并进行异或。两种结构的302,303,304和305将被异或。这个循环将重复到10000。

现在,如果我从304开始,是否预期会有任何性能提升?

3 个答案:

答案 0 :(得分:4)

是的,使用正确的对齐至少有两个好处:

  1. 可移植性。并非所有处理器都支持非对齐数字。为了获得最大的可移植性,您应该只使用完全对齐(即N字节整数从N的倍数开始)数字
  2. 速度。 AFAIK,即使是支持非对齐数字的处理器,对齐数字的速度仍然更快。

答案 1 :(得分:3)

过早优化是万恶之源

只需按照简单的方式进行,然后在探查器告诉您重要的情况下对其进行优化。

是的,如果你正确对齐,你会更快。如果你使用SSE2向量XOR指令,你会更快,在正确对齐的情况下,你一次只能做16个字节并且不会污染缓存。并且优化这一点的可能性极小,您应该花时间。

答案 2 :(得分:1)

有些处理器只允许在32位字边界上进行4字节操作(有些只允许在半字边界上进行操作)。

在这些处理器上,非对齐访问会导致处理器异常 - 取决于CPU,操作系统和设置 - 将导致进程崩溃或仅为操作系统执行大量工作。

在其他处理器(例如x86)上,每次操作只需要进行两次读写操作(加上一些移位)即可获得性能。

请参阅link text以查看ARM CPU的问题