手机
当前位置:查字典教程网 >编程开发 >C语言 >从汇编看c++中函数里面的static关键字的使用说明
从汇编看c++中函数里面的static关键字的使用说明
摘要:下面从汇编语言看其原理.下面是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++中函数里面的static关键字的使用说明】相关文章:

C字符串操作函数的实现详细解析

string与char*转换的使用详解

浅析c++中new和delete的用法

深入理解atoi()与itoa()函数的用法

C++关键字typename的深入理解

基于内核线程的创建、使用和退出以及延时宏的补充说明介绍

从汇编看c++中extern关键字的使用

C++中函数模板的用法详细解析

探讨:C++中函数返回引用的注意事项

C++Primer笔记之顺序容器的使用详解

精品推荐
分类导航