最开始我都认为全局变量和栈一样,存放在栈里,执行效率和栈一样,后面经过测试,才知道全局变量的执行效率都没有堆的高,也就是说比栈更差。
对于全局变量的理解:
1. 全局变量既不在栈中也不在堆中,而是在全局区(静态区) 全局变量的存储和静态变量的存储是在一起的
(1)初始化的全局变量和静态变量在同一块区域【是在数据段中的】
(2)未初始化的全局变量、未初始化的静态变量在相邻的另外一块区域内【是在数据段中的BSS段:特点是可读写;在程序执行前BSS段会自动清0】
关于全局变量执行效率问题
全局变量a++,局部变量b++
同样的赋值,局部变量只需要一条语句
ADDS r4,r4,#1 a数值加1
而全局变量需要5句,执行过程
LDR r0,[pc,#24] 执行了加载全局变量a的地址到通用寄存器R0
LDR r0,[r0,#0x00] 加载R0地址的数据到R0
ADDS r0,r0,#1 R0数值加1
LDR r1,[pc,#20] 加载a的地址到R1
STR r0,[r1,#0x00] 将R0的数据写到R1+0为地址的存储器中