當前位置:
首頁 >
static
發布時間:2024/4/24
32
生活家
一個進程在內存中的布局如
其中.text段保存進程所執行的程序二進制文件,.data段保存進程所有的已初始化的全局變量,.bss段保存進程未初始化的全局變量。在進程的整個生命周期中,.data段和.bss段內的數據時跟整個進程同生共死的,也就是在進程結束之后這些數據才會壽終就寢。
當一個進程的全局變量被聲明為static之后,它的中文名叫靜態全局變量。靜態全局變量和其他的全局變量的存儲地點并沒有區別,都是在.data段(已初始化)或者.bss段(未初始化)內,但是它只在定義它的源文件內有效,其他源文件無法訪問它。
static局部變量中文名叫靜態局部變量。它與普通的局部變量比起來有如下幾個區別:
1)位置:靜態局部變量被編譯器放在全局存儲區.data(注意:不在.bss段內,原因見3)),所以它雖然是局部的,但是在程序的整個生命周期中存在。
2)訪問權限:靜態局部變量只能被其作用域內的變量或函數訪問。也就是說雖然它會在程序的整個生命周期中存在,由于它是static的,它不能被其他的函數和源文件訪問。
3)值:靜態局部變量如果沒有被用戶初始化,則會被編譯器自動賦值為0,以后每次調用靜態局部變量的時候都用上次調用后的值。這個比較好理解,每次函數調用靜態局部變量的時候都修改它然后離開,下次讀的時候從全局存儲區讀出的靜態局部變量就是上次修改后的值。
static函數的作用域是本源文件,static函數可以很好地解決不同原文件中函數同名的問題,因為一個源文件對于其他源文件中的static函數是不可見的。
#include<stdio.h>
static int j;
void fun1(void)
{static int i=0;
i++;
printf("i=%d ",i);
}
void fun2(void)
{ j=0;
j++;
}
int main()
{int k=0;
for(k=0;k<10;k++)
{
fun1();
fun2();}
printf("j=%d ",j);
return 0;
}
View Code
總結
- 上一篇: 软件调试的技术和方法
- 下一篇: 虚拟化平台cloudstack(1)——