在linux下编写程序,不知你是否遇到过 “Segmentation fault” ,出现这种情况大多是因为访问到了未经允许的地址。
例如:
linux操作系统将进程的虚拟地址空间做了如图所示的分配:
思考:
#include<stdio.h>
int gdata1 = 10; //.data
int gdata2 = 0; //.bss
int gdata3; //.bss
static int gdata4 = 20; //.data
static int gdata5 = 0; //.bss
static int gdata6; //.bss
int main()
{
int data1 = 30; //.text //只有普通局部变量是指令
int data2 = 0; //.text
int data3; //.text
static int data4 = 40; //.data
static int data5 = 0; //.bss
static int data6; //.bss
return 0;
}
总结:
.text段是存放指令的;
.data段存放已初始化数据段,全局变量,静态变量。
.bss段存放未初始化以及初始化为0的全局变量,静态变量。