gpt4 book ai didi

c++ - 为什么 C++ 使用 32 位寄存器来存储 8 位值

转载 作者:行者123 更新时间:2023-12-01 14:47:24 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why doesn't GCC use partial registers?

(3 个回答)


去年关闭。




我尝试了以下 C++ 代码:

void foo( ) {
char c = 'a';
c = c + 1;
}
得到以下结果 x86-64 gcc 10.1 default flags :
    mov     BYTE PTR [rbp-1], 97
movzx eax, BYTE PTR [rbp-1] ; EAX here
add eax, 1
mov BYTE PTR [rbp-1], al
但!得到以下结果 x86-64 djgpp 7.2.0 default flags :
    mov     BYTE PTR [ebp-1], 97
mov al, BYTE PTR [ebp-1] ; AL here
inc eax
mov BYTE PTR [ebp-1], al
为什么 GCC 使用 EAX而不是 AL ?
以及为什么 djgpp 使用 AL只要?
是性能问题吗?
如果是这样,使用 8 位值的 32 位寄存器会带来什么样的性能问题?

最佳答案

在 AMD 和最新的 Intel 处理器上,加载部分寄存器需要整个寄存器的先前值,以便将其与加载的值组合以生成新的寄存器值。
如果写入完整的寄存器,则不需要旧值,因此,通过寄存器重命名,可以在上次写入寄存器之前完成。

关于c++ - 为什么 C++ 使用 32 位寄存器来存储 8 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62808748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com