从汇编看c++中函数里面的static关键字的使用说明
从汇编看c++中函数里面的static关键字的使用说明
发布时间:2016-12-28 来源:查字典编辑
摘要:下面从汇编语言看其原理.下面是c++源代码:复制代码代码如下:voidadd(){staticinti=1;i++;}intmain(){a...

下面从汇编语言看其原理.

下面是c++源代码:

复制代码 代码如下:

void add() {

static int i = 1;

i++;

}

int main() {

add();

}

下面是main对应的汇编码

复制代码 代码如下:

; 5 : int main() {

push ebp

mov ebp, esp

; 6 : add();

call ?add@@YAXXZ ; 调用add

; 7 :

; 8 : }

xor eax, eax

pop ebp

ret 0

下面是add函数对应的汇编码:

复制代码 代码如下:

; 1 : void add() {

push ebp

mov ebp, esp

; 2 : static int i = 1;

; 3 : i++;

mov eax, DWORD PTR ?i@?1??add@@YAXXZ@4HA;取变量i的值

add eax, 1;执行加法

mov DWORD PTR ?i@?1??add@@YAXXZ@4HA, eax;存变量i的值

; 4 : }

pop ebp

ret 0

可以看,不论是main函数,还是add函数里面,我们都看不到为i分配存储空间,也就是说,i不在他们的调用栈里面。

再看下面的汇编码:

复制代码 代码如下:

_DATA SEGMENT

?i@?1??add@@YAXXZ@4HA DD 01H ; 为变量i声明存储空间

; Function compile flags: /Odtp

_DATA ENDS

这条语句为i预先分配了存储空间,并且在上面两个函数汇编码的外面定义。因此,函数里面由static关键字修饰的变量生命期存在于整个程序里面,但是,可见性依然只在add函数里面,在外面访问不到.

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C语言学习
热门C语言学习
编程开发子分类