數據段和bss段分別存放 已初始化/未初始化 的全局變量和靜態變量。
那麼,假如bss段的全局變量和靜態變量在代碼執行中被初始化了,那麼會不會被轉移到
數據段存儲呢???
首先我覺得你所說的在執行中被初始化的說法是不正確的,應該叫賦值。
接下來我們看一段代碼:
#include <stdio.h>
int a;
int b=10;
int c=11;
int main(void)
{
int d;
int e=12;
return 0;
}
用gcc編譯後,(在linux下用命令size,得到如下結果)
text data bss dec hex filename
1115 560 8 1683 693 t10
繼續看下面修改後的代碼:
#include <stdio.h>
int a;
int a1;
int a2;
int a3;
int b=10;
int c=11;
int main(void)
{
int d;
int e=12;
return 0;
}
再用size命令,你會看到:
text data bss dec hex filename
1115 560 24 1699 6a3 t10
通過這些數據,你應該很容看出bss的大小變化,
而你所說的會不會轉移的問題,我想說,程序被編譯後,
就只會加載代內存中等待執行,不會轉移的。
希望對你有用!