1、 文本段:包含程序的指令,它在程序的执行过程中一般不会改变。
2、 数据段:包含了经过初始化的全局变量和静态变量,以及他们的值。
3、 BSS段:包含未经初始化的全局变量和静态变量。
4、 栈段:包含了函数内部声明的局部变量。
5、 堆段:动态分配
一个小例子:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int ga;//BSS段,全局变量
static int aa = 0;//数据段,全局变量
int gb;//BSS
int bb=0;//数据段
int main()
{
int b;//栈段,局部变量
char s[] = "abc";//s在栈,"abc"在文字常量区
char *p1,*p2;//栈段
static int gc;//BSS
char *p3="123456";//p3在栈,"123456"在文字常量区
static int cc=0;//全局区
p1 = (char *)malloc(10);//p1在栈,分配的10字节在堆
p2 = (char *)malloc(20);//p2在栈,分配的20字节在堆
printf("top of stack %p\n",&b);
printf(" stack %p\n",s);
printf(" stack %p\n",&p1);
printf(" stack %p\n",&p2);
printf(" stack %p\n",&p3);
printf("\n");
printf("top BSS %p\n",&gc);//
printf(" BSS %p\n",&ga);
printf(" BSS %p\n",&gb);
printf("\n");
printf("top of Data %p\n",&aa);
printf(" Data %p\n",&bb);
printf(" Data %p\n",&cc);
printf("\n");
printf("top of heap %p\n",p1);
printf(" heap %p\n",p2);
return 0;
}