zoukankan      html  css  js  c++  java
  • C++------内存分区模型

    一、内存分区模型

      代码区:存放函数体的二进制代码,有操作系统进行管理的

        存放CPU执行的机器指令

        代码区是共享的,共享的目的是对频繁被执行的程序,只需要在内存中有一份代码即可

        代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令 

      全局区:存放全局变量和静态变量以及常量,其中常量区存放const修饰的全局常量和字符串常量

        全局变量和静态变量存放在此

        全局区还包括了常量区,字符串常量和其他常量也存放在此

        该区域的数据在程序结束后由操作系统释放

      栈区:由编译器自动分配释放,存放函数的参数值,局部变量

          注意:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

      堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

         new操作符  

        c++中利用new操作符在堆区开辟数据

        堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符delete

    二、引用

      引用的基本使用→作用:给变量起别名

        语法:数据类型 &别名 = 原名

        引用的注意事项:引用必须初始化、引用在初始化后,不可以改变

          注意:  int &c = a;  → 初始化; int &c  = d; → 错误的,初始化后,不可改变; c = b; → 此处是赋值操作,不是更改引用

      引用做函数参数

        引用传递,形参会修饰实参的

      引用做函数返回值

        作用:引用是可以作为函数的返回值存在的

          注意:不要返回局部变量引用

     1 // 不要返回局部变量的引用
     2 int &test01()
     3 {
     4     int a = 10; // 局部变量存放在栈区
     5     return a;
     6 }
     7 
     8 int main()
     9 {
    10     int &ref = test01();
    11     
    12     cout << "ref = " << ref << endl; // 第一次结果正确,是因为编译器做了保留
    13     cout << "ref = " << ref << endl; // 第二次结果错误,因为a的内存已经释放
    14     /*输出结果: ref = 10       ref = 1657912288*/
    15 }
    返回局部变量的演示

               函数的调用可以作为左值

     1 int &test01()  // 引用函数
     2 {
     3     static int a = 10; // 静态变量,存放在全局区,全局区中的数据在程序结束后系统释放
     4     return a;
     5 }
     6 
     7 int main()
     8 {
     9     int &ref = test01();  // 此处 &ref 初始化后,成为函数a的别名
    10     
    11     cout << "ref = " << ref << endl; 
    12         test01() = 1000; // 该处是对函数中的 返回值 a重新赋值
    13     
    14     cout << "ref = " << ref << endl;  // 此处 ref 作为a 的别名,输出的值也是与返回值a相等,test01() 引用函数返回值改变a 改变 ref 随之改变
    15     /*输出结果:ref = 10     ref = 1000*/
    函数调用可以作为左值
  • 相关阅读:
    最基础的账户余额要怎么在 mysql 实现?
    跳跃表时间复杂度分析推导
    Redis:RDB 中 fork 的使用
    字段、约束和索引在存储过程中的判断
    高效沟通的基本流程
    人月神话--画蛇添足
    课程评价及加分项
    人月神话--提纲挈领
    热词搜索七
    《大道至简:软件工程实践者的思想》
  • 原文地址:https://www.cnblogs.com/evething-begins-with-choice/p/12949061.html
Copyright © 2011-2022 走看看