当前位置: 首页 > news >正文

cpp 内存分区模型

c++程序在执行前,将内存大方向划分为4个区域。

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

2.全局区:存放全局变量和静态变量以及常量

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

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

不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。

程序运行前,生成了exe可执行程序,未执行该程序前分为两个区域

1代码区:

​ 存放 CPU 执行的机器指令

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

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

2.全局区:

全局变量和静态变量、字符串常量、全局常量存放在这

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

#include <iostream>
using namespace std;
int ga=10;
int gb=20;
const int gca=2222;
const int gcb=3333;
int main() {int a=10;int b=20;static int sa=10;static int sb=20;const int ca=2222;const int cb=3333;cout<<"全局变量"<<endl;cout<<&ga<<endl;cout<<&gb<<endl;cout<<"全局常量"<<endl;cout<<&gca<<endl;cout<<&gcb<<endl;cout<<"局部变量"<<endl;cout<<&a<<endl;cout<<&b<<endl;cout<<"静态局部变量"<<endl;cout<<&sa<<endl;cout<<&sb<<endl;cout<<"局部常量"<<endl;cout<<&ca<<endl;cout<<&cb<<endl;return 0;
}

运行结果如下:

可以看出,局部常量和局部变量都是在栈区分配的,符合先进后出原则。

  • C++中在程序运行前分为全局区和代码区
  • 代码区特点是共享和只读
  • 全局区中存放全局变量、静态变量、常量
  • 常量区中存放 const修饰的全局常量 和 字符串常量

程序运行后

栈区:

由编译器分配和释放,存放函数的参数值和局部变量

堆区:

由程序员分配释放,若程序员不释放,程序结束后由操作系统释放,在cpp中主要由new关键字开辟内存,利用delete释放内存。

利用new创建的数据,会返回该数据对应的类型的指针

//堆区开辟数组
int main() {int* arr = new int[10];for (int i = 0; i < 10; i++){arr[i] = i + 100;}for (int i = 0; i < 10; i++){cout << arr[i] << endl;}//释放数组 delete 后加 []delete[] arr;system("pause");return 0;
}

http://www.lryc.cn/news/335532.html

相关文章:

  • 44.网络游戏逆向分析与漏洞攻防-角色管理功能通信分析-角色创建服务器反馈数据包分析
  • web安全学习笔记(6)
  • 揭秘“二次放号查询接口”:为您的通信安全保驾护航
  • 字节8年经验之谈 —— 如何实现高效的自动化渗透测试?
  • ElasticSearch分词检索
  • 每日三道面试题之 Java并发编程 (四)
  • ubuntu20.04.6将虚拟机用户目录映射为磁盘Z
  • TCP挥手中TIME_WAIT存在的原因
  • 使用Docker部署jar包
  • 深入了解WebKit:结构简介
  • Pgsql怎样找到表中某个字段值重复的记录并删除冗余记录,只保留一条
  • 如何在HarmonyOS(鸿蒙操作系统)上进行应用开发
  • C++ typeid运算符介绍
  • Android适配平板屏幕尺寸
  • 汽车充电桩主板在出厂前需要做哪些检测?
  • 关于Renesas R7 的选项字节开关看门狗
  • redis bigKey问题
  • 二手车商的套路
  • c++ 根据ip主机号和子网掩码随机生成ip
  • 事务的隔离级别
  • 性能优化角度
  • Vue3 使用ElementUI 显示异常
  • 从0开始复习python~
  • 从零开始搭建后端信息管理系统(新手小白比如)
  • CentOS 7详细介绍。
  • JavaScript:nodeType节点/文档碎片对象模型-DcoumentFragment
  • JDK安全剖析之安全处理入门
  • 探索RAG:加强问答能力的新技术
  • 赛氪网|2024中国翻译协会年会“AI科技时代竞赛与就业”分论坛
  • 【Jmeter+Influxdb+Grafana性能监控平台安装与部署】