用汇编代码解释变量声明定义概念

来源:互联网 发布:淘宝网网支付方式 编辑:程序博客网 时间:2024/04/29 18:32

     学过C语言都知道变量有声明只是告诉编译器某个标识符是变量,而变量定义才会促使编译器为这个变量分配存储空间。下面就分类介绍不同的情况下,汇编后的代码:

     一、全局变量

           1. 临时定义(tentactive definition)一个外部全局变量a,代码如下:

                                         

               汇编代码如下,认真看可知,int a对应的17行中的汇编代码,表示在数据段中分配一块地址是4字节对齐的区域。

                     

            

           2. 真实定义(definition)外部全局变量a,代码如下(为节省空间,仅列出关键部分):

                    

               汇编代码如下,对比增加了2-7行,且原来的17行没有了,第2行globl说明a是多文件都可调用。

                     

          3. 声明变量,即用exteren修饰全局变量。代码如下:

                      

               汇编代码如下,可知,exteren int a没有产生任何代码。

                         

           4. 定义静态全局变量,static修饰变量,临时定义情况下,代码如下

                    

                汇编代码如下,对比多出17、18行,17行中local说明a是静态变量,只能在当前文件中调用。

                     

               真实定义静态全局变量,代码如下:

                    

               汇编代码如下,对比可知“.golobl a”没有了,其他与真实定义一样。

                    

               根据上面代码知道,不管是extern还是static,不管是临时定义还是真实定义,全局变量存放都是静态内存空间,而非栈中。

      二、临时变量

               临时定义变量一样不会生成任何汇编代码,真实定义的变量都存放在栈中,汇编代码如下,变量赋值在12行,明显存放在栈中。

                           

 

原创粉丝点击