从一个站点读取一个读取,你不能创建一个类型为register的全局变量.为什么会这样?来源:http: //publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/language/ref/regdef.htm
caf*_*caf 21
在理论上,你可以分配处理器寄存器的全局范围变量-该寄存器也只会保持分配给该变量为程序的整个生命周期.
但是,C编译器通常不会在编译阶段看到整个程序 - 编写C标准,以便每个转换单元(大致对应于每个.c文件)可以独立于其他转换单元进行编译(以后链接编译对象)进入一个程序).这就是为什么不允许全局范围寄存器变量 - 当编译器正在编译时b.c,它无法知道有一个全局变量分配给寄存器a.c(因此函数b.c必须保留该寄存器中的值).
Nor*_*ame 12
实际上,GCC允许这样做.全球范围内的声明形式:
register int foo asm ("r12");
Run Code Online (Sandbox Code Playgroud)
为全局"foo"分配寄存器"r12"(在x86_64上).这有许多限制,相应的手册页可能是所有麻烦的全局寄存器变量的最佳参考:
因为它会毫无意义.应用程序工作时始终存在全局变量.这么长时间肯定没有免费的处理器注册;)