| 
 C语言程序编译的内存分配: 
1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等; 
2.堆区(heap) --由程序员分配释放; 
3.全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区; 
4.字符常量区 --常量字符串放与此,程序结束时由系统释放; 
5.程序代码区 例:  //main.c 
int a=0;        //全局初始化区 
char *p1;       //全局未初始化区 
void main() 
{ 
   int b;          //栈 
   char s[]="bb";  //栈 
   char *p2;       //栈 
   char *p3="123"; //其中,“123\0”常量区,p3在栈区 
   static int c=0; //全局区 
   p1=(char*)malloc(10);   //10个字节区域在堆区 
   strcpy(p1,"123");    //"123\0"在常量区,编译器 可能 会优化为和p3的指向同一块区域 
} 
 
 |