前言
软件为visual studio2017,内容为C++学习笔记,以及相关的问题处理方法,目的是方便回顾和复习。
笔记来自于:黑马程序员C++教程。
一、内存分区模型
1、C++程序在执行时,将内存大方向划分为4个区域。
- 代码区:存放函数的二进制代码,由操作系统进行管理的。
- 全局区:存放全局变量和静态变量以及常量
- 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
2、内存4区意义
程序运行前存在的区域为:代码区和全局区
程序运行后存在的内存区域为:栈区和堆区
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程。
3、程序执行前
在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
(1)代码区
1、存放CPU执行的机器指令
2、代码区是**共享**的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。
3、代码区是**只读**的,使其只读的原因是防止程序以外的修改了它的指令。
(2)全局区
1、全局变量和静态变量存放于此。
2、全局区还包含了常量区,字符串常量和其他常量也存放榆次。
3、该区域的数据在程序结束后由操作系统释放。
- 代码示例:
# include <iostream>
using namespace std;
# include <string>
int g_a = 10;
int g_b = 10;
const int c_g_a = 10;
const int c_g_b = 10;
int main() {
//全局区
//全局变量、静态变量、常量(三者的内存地址靠近,都放在了全局区内)
//创建普通局部变量,在函数体内的变量都叫做局部变量。
//在函数体内的变量都叫做局部变量。
//在函数体外的变量都叫做全局变量。
int a = 10;
int b = 10;
cout << "局部变量a的地址为:" << (