關於靜態全局變量的一些想法

靜態全局變量在初始化的時候只初始化一次,接着它就不在初始化了,這是怎麼實現的那,我們通過反彙編代碼來看看。
#include<stdio.h>
int fun(int a1)
{
 static int a=a1;
 static int b=10;
 a++;
 return a;
}
void main()
{
 int a1,a;
 for(a1=10;a1>0;a1--)
 {
  a=fun(a1);
  printf("%d ",a);
 }
 

}
static int a=a1;
0082355E  mov         eax,dword ptr [$S1 (827164h)]
00823563  and         eax,1
00823566  jne         fun+3Dh (82357Dh)
00823568  mov         eax,dword ptr [$S1 (827164h)]
0082356D  or          eax,1
00823570  mov         dword ptr [$S1 (827164h)],eax
00823575  mov         eax,dword ptr [a1]
00823578  mov         dword ptr [a (827168h)],eax 
5:  static int b=10;
我們來看反彙編,在反彙編裏面很清晰的表達出了對於這個靜態量的過程。
就好像在靜態量上面有個判斷標誌如果是0的話,就給他賦值,若不是的話,直接跳過並不給他賦值。
再觀察b的表現,我們發現,沒有任何彙編語句對應,爲什麼會這樣那?
因爲在執行次行的時候,編譯器發現b後面是以個常量,就直接把它寫進了全局變量裏面。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章