C++内存模型学习笔记
以《C++ Primer Plus》第九章为准

编译过程

C/C++、C#等都是高级语言,要在机器上运行还需要翻译成机器语言,这一过程称为编译
编译经过四大过程:

  • 预编译 把头文件的函数声明拷贝到源文件 创建一个.i/.ii文件
  • 编译 语法分析,符号汇总
  • 汇编 生成函数名到函数地址的映射。便于之后函数定位 创建.obj目标文件
  • 链接 将多个文件的符号表汇总合并 将目标文件、库代码、启动代码合并

内存模型

C++没有明确的内存模型,但通常可以按如下内容理解。
C++内存有四个部分:

  • 代码段 存储程序的执行代码
  • 数据段 存储全局变量、静态变量、常量
  • 堆内存 用于存储在程序运行时使用new或malloc申请的动态内存,需要程序员手动delete或free。
  • 栈内存 用于存储局部变量和函数调用信息。栈内存分配和释放是由编译器自动管理的,一旦函数调用结束,这部分内存将被释放。

C++11的内容(并行、锁等)

还没学到