C语言内存空间的使用--内存分布图

内存分布图程序员

 //
  内核空间    应用程序不准访问
------------------------------- 3G
  栈空间      局部变量           RW
-----------
  运行时的堆空间 malloc
-----------
  全局的数据空间 全局变量(又能够分为:初始化的,未初始化)static RW位置: 初始化data 未初始化和static bss 
  只读数据段    "hello" 字符串常量    R        const         位置:  TEXT
  代码段        code                R                      位置:  TEXT
------------ 
0x0 :

 

一个由C/C++编译的程序占用的内存分为如下几个部分  数据结构

 

     一、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其  函数

  操做方式相似于数据结构中的栈。  code

  

    二、堆区(heap)   —   通常由程序员分配释放,   若程序员不释放,程序结束时可能由OS回  内存

  收   。注意它与数据结构中的堆是两回事,分配方式却是相似于链表,呵呵。  字符串

 int a[5];     malloc(5*sizeof(int))
char *p;
 p = (char *)malloc(100);
if(p == NULL){
  error
}

典型内存泄漏。p赋值没释放
void fun()
{
  char *p;
   p = (char *)malloc(100);
  return ;
}

 释放: free(p);

 

三、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的  编译器

  全局变量和静态变量在一块区域,   未初始化的全局变量和未初始化的静态变量在相邻的另  
  一块区域。   -   程序结束后由系统释放。  编译

     

     四、文字常量区   —常量字符串就是放在这里的。   程序结束后由系统释放  变量

 

     五、程序代码区—存放函数体的二进制代码。内存泄漏