C语言内存分布图----栈空间、堆空间

-----------------------------------------------------------          4G(0xffff ffff)

内核空间              应用程序不许访问

------------------------------------------------------------         3G

 栈空间                 RW           局部变量保存位置            

-------------------------------------------------------------

运行时堆空间                           malloc

--------------------------------------------------------------

全局的数据空间     RW     (初始化的(data)、未初始化的(bss))     data    bss

只读数据段             R         “ Hello world ”,                     text

代码段(只读)           R                code                                text

---------------------------------------------------------------0x00

ubuntu@ubuntu-virtual-machine:~$ size struct
   text       data        bss        dec        hex    filename
   1267        560          8       1835        72b    struct

一个局部变量前进行static修饰时,作用范围没有变还是当前函数内部,但是函数返回时,并没有释放,这一变量将进入静态数据段中的全局数据空间。

栈地址:运行时,函数内部使用的变量,函数一旦返回,就释放,生存周期时函数内

堆空间:运行时,可以自由、自我管理的分配和释放空间,生存周期由程序员决定

           分配:

                       malloc(),一旦成功,返回分配好的地址给我们,只需要接受,对于这个新地址的读法,由程序员灵活把握,输入参数决定分配的大小,单位是Byte。                       

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

                释放:

 free(p);       

  

猜你喜欢

转载自blog.csdn.net/weixin_42039602/article/details/82354356