美文网首页
堆 / 栈 / 自由存储区 / 静态存储区 / 常量存储区

堆 / 栈 / 自由存储区 / 静态存储区 / 常量存储区

作者: 棒棒0_0 | 来源:发表于2018-07-20 10:00 被阅读0次

    在C++中, 内存分成5个区,分别是堆,栈,自由存储区,静态存储区,常量存储区。

    栈:
    编译器在需要的时候分配,在不需要的时候自动清除。里面的变量通常是局部变量或者函数参数。
    堆:
    由new分配的内存块,编译器并不关心它们的释放,由我们的应用程序去控制。如果我们没有释放掉,那么在程序结束后,系统会自动回收。
    自由存储区:
    由malloc分配的内存块,和堆非常相似,不过它用free来释放。
    静态存储区:
    全局变量和静态变量分配到静态存储区,在C语言中,全局变量又分为初始化的和未初始化的,在C++里面就没有这种区分,他们共同占用同一块内存。
    常量存储区:
    他们里面存放的是常量,不允许修改

    int a = 0;                //静态存储区 
    char *p1;                 //静态存储区 
    void main()
    {
       int b;                //栈 
       char s[] = "abc";     //栈 
       char *p2;             //栈 
       char *p3 = "123456";  //123456:常量存储区,p3:栈 
       static int c = 0;     //静态存储区 
       p1 = new char[10];    //堆
       p1 = "123456";        //123456:常量存储区,编译器将p1与p3所指向的"123456"优化成同一个地方
    }
    

    相关文章

      网友评论

          本文标题:堆 / 栈 / 自由存储区 / 静态存储区 / 常量存储区

          本文链接:https://www.haomeiwen.com/subject/uhlfmftx.html