内存分区模型
1内存分区模型
C++程序在执行I将内存大方向划分为4个区域
●代码区:存放函数体的二进制代码,由操作系统进行管理的
●全局区:存放全局变量和静态变量以及常量
●栈区:由编译器自动分配释放存放函数的参数值局部变量等
●堆区:由程序员分配和释放若程序员不释放程序结束时由操作系统回收
不同区域存放不同数据,变成更加灵活
代码区和全局区
1.1程序运行前
在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域
代码区:
存放CPU执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区是只读的,使其只读的原因是防止程序外错误地修改了它的指令
从实践中可知,我们一般只能运行exe程序,比如QQ,但不能修改他的指令
全局区:
全局变星和静态变量存放在此
全局区还包含了常量区,字符串常量和其他常量也存放在此
其他常量如const修饰的常量
该区域的数据在程序结束后由操作系统释放
全局区
· C++中在程序运行前分为至局区和代码区·代码区特点是共亨和只读
·全局区中存放全局变量、静态变量、常量
·常量区中存放const修饰的全局常量和字符串常量
栈区
void test (int b) 形参b也会被放在栈区
即动态内存分配
动态分配单个元素,数组,结构体....
结果都是10
不释放堆区内存,数据一直存在