当前位置:嗨网首页>书籍在线阅读

15-把全局变量放到寄存器中

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

把全局变量放到寄存器中

GCC支持编程人员把全局变量放到某个计算机寄存器中,在程序执行期间,变量就会在寄存器中。GCC称这类变量为“全局寄存器变量”。

该语法要求编程人员指定计算机寄存器。以下示例会使用ebx:

601.png 编程人员必须选择一个变量,在函数中一直可用:也就是说,选中的变量必须也可以用于局部函数,在函数调用时保存和恢复,不是为了体系结构或操作系统ABI的特定目标而指定的。如果选中的寄存器不正确,编译器会生成一条告警信息。如果寄存器是正确的——比如这个示例中的ebx,可以用于x86体系结构——编译器自己会停止使用寄存器。

如果频繁使用变量,这种优化可以带来极大的性能提升。一个好的示例是使用虚拟机。把变量保存到寄存器的虚拟栈指针中可能会带来一些收益。另一方面,如果体系结构没有足够的寄存器(正如x86那样),这种优化方式就没什么意义。

全局寄存器变量不能用于信号处理器中,也不能用于多个执行线程中。它们也没有初始值,因为可执行文件无法为寄存器提供默认内容。全局寄存器变量声明应该在所有函数定义之前。