c++中的static关键字可以修饰全局变量,局部变量和类成员数据(当然还有类的成员函数,但是这里只讨论static修饰变量的情况)。对于static修饰全局变量的情况,和单纯的全局变量类似,生命期存在于整个程序执行期间,在程序加载后,第一条程序语句执行之前就已存在,只是编译器限制它只有文件作用域(即只能在本文件访问)。因此,static修饰的全局变量等价于只有文件作用域的全局变量。
对于static修饰的局部变量有点特殊,该变量的可见性(也就是作用域)任是函数里面,但是生命期确实整个程序运行期间,下面来看一看实际情形:
c++源码:
void add(int i) { int main() { |
对应的汇编码:
_BSS SEGMENT ; 1 : void add(int i) { push ebp ; 2 : static int sum = 0; mov eax, DWORD PTR ?sum@?1??add@@YAXH@Z@4HA;取sum的值放入寄存器eax ; 4 : } pop ebp ; 6 : int main() { push ebp ; 7 : add(5); push 5;将参数5压栈 ; 8 : } xor eax, eax |