C语言中寄存器变量(数据类型:寄存器)的概念?

Ren*_*h G 4 c memory

我只想了解如何在C程序可执行文件中处理寄存器变量.即在嵌入式系统和X86机器(C台程序中可执行的C程序)中,它在哪个位置(或寄存器)准确存储?

这个观点怎么样?(如果我错了,请纠正我)

假设我们已将函数内的一个变量声明/初始化为'int'数据类型.通常它会进入堆栈段,只有在运行时,当调用者调用包含局部变量的被调用者时,它才会出现在该部分中.但是如果我们将上面的局部变量声明为'register int',那么它也将转到堆栈段.但是在运行时,处理器将堆栈中的局部变量放入其通用寄存器位置(因为'register'关键字导致额外的编译器插入代码)以及从那里快速访问它.

这是它们之间唯一的区别是在运行时访问,并且它们之间没有内存加载差异.

__Kanu

abe*_*nky 10

registerC中的关键字(很少见过)只是对编译器的一个提示,即将变量保存在寄存器中以便更快地访问它可能是有用的.

编译器可以自由地忽略提示,并在最佳情况下进行优化.

由于现代编译器在理解使用和速度方面要比人类好得多,因此register关键字通常被现代编译器忽略,在某些情况下,实际上可能会降低执行速度.

  • 另请注意,如果使用`register`关键字声明变量,则无法获取该地址. (3认同)

小智 7

来自K&R C:

寄存器变量建议编译器将大量使用有问题的变量.我们的想法是将寄存器变量放在机器寄存器中,这可能会导致更小更快的程序.但编译器可以自由地忽略这个建议.

无论变量是否实际放在寄存器中,不可能获取寄存器变量的地址.

因此,

register int x;
int *y = &x; // is illegal  
Run Code Online (Sandbox Code Playgroud)

所以,你必须权衡无法获得寄存器变量的地址.