我的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;
答案 0 :(得分:2)
i
关键字与此处无关; i
数据类型在相关平台上仍为32位。
register
int
也无关紧要,因为几乎可以肯定它会被忽略。不管显式指令如何,编译器将在可能且有利的情况下使用寄存器存储,同样也可能不会。