在x86_64模式下,寄存器中无法容纳64位数字

时间:2019-03-11 10:57:11

标签: c++ c gcc assembly cpu-registers

我的PC上有一个Intel处理器,以64位模式x86_64运行,如果我使用字寄存器或使用某些标志优化功能,则该变量倾向于放置在其中,寄存器的大小为64位寄存器,但是如果我将值设置为高于32位,则编译器会抱怨,即我的int不是64位,为什么会发生这种情况?如果将变量放在寄存器中,那不是64位,我什至没有得到它的内存地址?也就是说,它甚至没有放在堆栈上。

#include <stdio.h>

int main(void) {

    register int x = 4294967296;

    return 0;
}

编译:

  

gcc example.c -o example -Wall -Wextra

输出:

  

警告:隐式常量转换中的溢出[-Woverflow]         注册int x = 4294967296;

1 个答案:

答案 0 :(得分:2)

i关键字与此处无关; i数据类型在相关平台上仍为32位。

register

int也无关紧要,因为几乎可以肯定它会被忽略。不管显式指令如何,编译器将在可能且有利的情况下使用寄存器存储,同样也可能不会。