我发现相同的C++代码的性能降低了15%,这些代码编译为完全相同的机器指令但位于不同对齐的地址上.当我的微小主循环从0x415220开始时,它比在0x415250时更快.我在Intel Core2 Duo上运行它.我在x86_64 Ubuntu上使用gcc 4.4.5.
任何人都可以解释减速的原因以及如何强制gcc最佳地对齐循环?
以下是具有探查器注释的两种情况的反汇编:
415220 576 12.56% |XXXXXXXXXXXXXX 48 c1 eb 08 shr $0x8,%rbx 415224 110 2.40% |XX 0f b6 c3 movzbl %bl,%eax 415227 0.00% | 41 0f b6 04 00 movzbl (%r8,%rax,1),%eax 41522c 40 0.87% | 48 8b 04 c1 mov (%rcx,%rax,8),%rax 415230 806 17.58% |XXXXXXXXXXXXXXXXXXX 4c 63 f8 movslq %eax,%r15 415233 186 4.06% |XXXX 48 c1 e8 20 shr $0x20,%rax 415237 102 2.22% |XX 4c 01 f9 add %r15,%rcx 41523a 414 9.03% |XXXXXXXXXX a8 0f …