程序中的数据在内存中的布局
.bss和.data段是专用来存储全局变量的,在编译其间分配地址空间。
.data包含静态的己初始化的数据,而.bss包含未初妈化的数据。
.text段包含程序指令和和很多只读数据。
一个进程在内存中的数据组织如下图
+-------------------+ 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都存储于stack中。
2、heap
int main()
{
char *data = malloc(10);
...
}
data指向一个地址,该地址在heap中
3、.bss
char global;
int main()
{
...
}
int main()
{
static int bss_var;
}
global和bss_var存放于.bss中,它们是未初始化的全局变量和静态变量。
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中。它们是已经初始化的全局变量和静态变量。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1785632