手机
当前位置:查字典教程网 >编程开发 >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字符串操作函数的实现详细解析

c++ 指针与引用的区别介绍及使用说明

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

c++友元函数与友元类的深入解析

C++中关于Crt的内存泄漏检测的分析介绍

C语言函数的递归和调用实例分析

C++函数参数取默认值的深入详解

C语言中函数声明与调用问题

C 语言restrict 关键字的使用浅谈

C++的static关键字及变量存储位置总结

精品推荐
分类导航