程序中的數(shù)據(jù)在內(nèi)存中的布局
.bss和.data段是專用來存儲(chǔ)全局變量的,在編譯其間分配地址空間。
.data包含靜態(tài)的己初始化的數(shù)據(jù),而.bss包含未初媽化的數(shù)據(jù)。
.text段包含程序指令和和很多只讀數(shù)據(jù)。
一個(gè)進(jìn)程在內(nèi)存中的數(shù)據(jù)組織如下圖
+-------------------+ high address
| env strings |
+-------------------+
| argv strings |
+-------------------+
| env pointers |
+-------------------+
| argv pointers |
+-------------------+
| argc |
+-------------------+
| stack |
| ^ |
| | |
| | |
| v |
| heap |
+-------------------+
| .bss |
+-------------------+
| .data |
+-------------------+
| .text |
+-------------------+ low address
1、stack
int func()
{
int i = 0;
...
}
int main(int argc, char *argv[])
{
int j;
}
i, j都存儲(chǔ)于stack中。
2、heap
int main()
{
char *data = malloc(10);
...
}
data指向一個(gè)地址,該地址在heap中
3、.bss
char global;
int main()
{
...
}
int main()
{
static int bss_var;
}
global和bss_var存放于.bss中,它們是未初始化的全局變量和靜態(tài)變量。
4、.data
char global = 'a';
int main(int argc, char *argv[])
{
...
}
int main(int argc, char *argv[])
{
static char data_var = 'a';
}
global和data_var都存放在.data中。它們是已經(jīng)初始化的全局變量和靜態(tài)變量。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1785632