相关疑难解决方法(0)

在x86-64中是否存在性能损失访问32位整数数组?

对不起,如果问题听起来很愚蠢.我只是模糊地认识到数据对齐的问题,并且从未做过任何64位编程.我正在研究一些32位x86代码.它经常访问int数组.有时会读取一个32位整数.有时读两个或更多.在某些时候,我想将代码设置为64位.我不确定是否应该将此int数组声明为intlong int.我宁愿保持整数的宽度相同,所以我不必担心差异.虽然读取/写出与自然单词不对齐的地址可能会很慢,但我有点担心.

c c++ x86-64

7
推荐指数
1
解决办法
549
查看次数

在x86-64中使用32位寄存器/指令的优点

有时gcc使用32位寄存器,当我希望它使用64位寄存器时.例如以下C代码:

unsigned long long 
div(unsigned long long a, unsigned long long b){
    return a/b;
}
Run Code Online (Sandbox Code Playgroud)

使用-O2选项编译(省略一些样板文件):

div:
    movq    %rdi, %rax
    xorl    %edx, %edx
    divq    %rsi
    ret
Run Code Online (Sandbox Code Playgroud)

对于无符号除法,寄存器%rdx需要0.这可以通过xorq %rdx, %rdxxorl %edx, %edx似乎具有相同的效果来实现.

至少在我的机器上没有性能提升(即加速)进行xorlxorq.

我实际上不只是一个问题:

  1. 为什么gcc更喜欢32位版本?
  2. 为什么gcc会停止xorl并且不使用xorw
  3. 有没有xorl比这更快的机器xorq
  4. 如果可能的话,总是更喜欢32位寄存器/操作而不是64位寄存器/操作吗?

assembly gcc x86-64 micro-optimization

7
推荐指数
2
解决办法
749
查看次数

标签 统计

x86-64 ×2

assembly ×1

c ×1

c++ ×1

gcc ×1

micro-optimization ×1