Memory Model

notion image
alt text
  • Stack
    • Local(局部变量) > 函数调用时使用的(运行main( )函数也算调用函数呀) > + 函数调用时的参数,和使用中的临时局部变量都压在栈中
  • Heap
    • dynamically(动态) > 堆区用于管理动态分配出来的内存 > + 比如malloc,new出来的东西都放在堆区
  • data/code
    • static(静态) > 具有持久性的变量 > + global vars > + static global vars(与gobal vars的区别是它受到保护不能跨文件声明使用) > + static local vars

Rules of Reference

  1. 引用在定义的时候必须被初始化,也就是必须说明引用所绑定的对象 > int& y = x; > 这里面 y 是引用,x 是对象,所以 y 必须被初始化,也就是必须说明引用所绑定的对象,后面必须有个 = 号 > + 唯一的例外是参数表,比如在函数的形参处可以先不用初始化,因为函数被调用的时候,引用变量自然会被绑定 > + 引用变量只要存在就必须有一个绑定对象
  1. 引用不能被重新绑定,也就是在引用被初始化后,引用不能重新指向另一个对象
  • Warning: 引用变量不能绑定一个右值,比如下面:
引用变量不能是赋予一个表达式值的,因为表达式的值是临时的,引用变量不能绑定一个临时量

pointer&reference

Dynamic memory allocation 动态分配内存

  • new
    • new int;
    • new Stash;
    • new int[10];
  • delete
    • delete p;
    • delete[] p;
Eg:
  • new 和 delete 除了对于一般数据类型的内存操作,更重要可以用于自定义类型的操作:用new的话,除了执行malloc的分配内存的操作,还会执行该自定义类型的构造函数,同样,delete 会先执行析构函数,再回收内存。
notion image
 
Loading...