如何區分資料和指令

MaoMao_Sister發表於2017-10-10

程式分為資料和指令,以一段程式為例:

int  g_date1 = 10;
int  g_date2 = 0;
int  g_date3;

static  int  g_date4 = 10;
static  int  g_date5 = 0;
static  int  g_date6 ;

int main()
{
int  a = 10;
int  b = 0;
int  c;

static  int  d = 10;
static  int  e = 0;
static  int  f ;

return 0;
}

該段程式碼中包括全域性變數和區域性變數。其中全域性變數又包括普通全域性變數和靜態全域性變數,普通全域性變數為:g_date1、g_date2、g_date3,靜態全域性變數為:g_date4、g_date5、g_date6。同樣的,區域性變數也分為普通區域性變數和靜態區域性變數,普通區域性變數為:a、b、c,靜態區域性變數為d、e、f。有些變數是初始化的,有些則沒有初始化,哪些是資料,又有哪些是指令?

資料包括全域性變數(包括就普通和靜態兩種)和靜態區域性變數,而指令則為普通區域性變數。對可執行檔案而言,儲存時,初始化且值不為0的資料放在.date區(即資料段),未初始化(包括初始化為0)的資料放在.bss區,指令放在.text區。特殊的,沒有被初始化的普通全域性變數在編譯檔案中存放在.comment區,在可執行檔案中存放在.bss區。

程式執行,即程式啟動之後,.bss會被清零。

相關文章