Skip to content

Commit 5461ded

Browse files
committed
update
1 parent ac38e21 commit 5461ded

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

3/zend_global_register.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ static int __attribute__((fastcall)) ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(zend_exe
6060

6161
寄存器变量存放在CPU的寄存器中,使用时,不需要访问内存直接从寄存器中读写,与存储在内存中的变量相比,寄存器变量具有更快的访问速度,在计算机的存储层次中,寄存器的速度最快,其>次是内存,最慢的是内存。C语言中使用关键字register来声明局部变量为寄存器变量,需要注意的是,只有局部自动变量和形式参数才能够被定义为寄存器变量,全局变量和局部静态变量都不能被定义为寄存器变量。而且,一个计算机中寄存器数量是有限的,一般为2到3个,因此寄存器变量的数量不能太多。对于在一个函数中说明的多于2到3个的寄存器变量,C编译程序会自动地将寄存器变量变为自动变量。 受硬件寄存器长度的限制,寄存器变量只能是char、int或指针型,而不能使其他复杂数据类型。由于register变量使用的是硬件CPU中的寄存器,寄存器变量无地址,所以不能使用取地址运算符"&"求寄存器变量的地址。
6262

63-
GCC从4.8.0版本开始支持了另外一项特性:全局寄存器变量,也就是可以把全局变量定义为寄存器变量,从而可以实现函数间共享数据。可以通过下面的语法告诉编译器使用寄存器来保存数据:
63+
GCC从4.8.0版本开始支持了另外一项特性:全局寄存器变量(Global Register Variables,参考:https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/Global-Register-Variables.html),也就是可以把全局变量定义为寄存器变量,从而可以实现函数间共享数据。可以通过下面的语法告诉编译器使用寄存器来保存数据:
6464
```c
6565
register int *foo asm ("r12"); //r12、%r12
6666
```

0 commit comments

Comments
 (0)