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

C++基础知识:C++内存分区模型,全局变量和静态变量以及常量,常量区,字符串常量和其他常量,栈区,堆区,代码区和全局区

1.C++内存分区模型

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

代码区:存放函数体的二进制代码,由操作系统进行管理的(在编译器中所书写的代码都会存放在这个空间。)

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

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

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

内存四区意义:
不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程(方便操作系统管理)

2.程序运行前


在程序编译后,生成了exe(在windows操作系统中)可执行程序,未执行该程序前分为两个区域

1.代码区:


存放 CPU 执行的机器指令
代码区是共享共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可代码区只读使其只读的原因是防止程序意外地修改了它的指令

2.全局区:


全局变量静态变量存放在此.


全局区还包含了常量区,字符串常量其他常量也存放在此

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

#include<iostream>using namespace std;// 全局变量
//在函数体外创建的变量是全局变量
int flag=0;
//这个flag就是全局变量//const 修饰的全局变量
const  int const_a=10;int main(){//    创建局部变量int a=10;
//    在函数体内创建的变量都是局部变量,这里的函数体是main//    在一个变量前面加上关键字static就是静态变量static int d=50;//常量://1.字符串常量
//    字符串指的是用双引号引起来的//    const 修饰的变量
//    1.const修饰的全局变量,const修饰的局部变量const int const_b=20;
//    上面是const修饰的局部变量system("pause");return 0;
}

 

 

3. 程序运行后


1.栈区:


由编译器自动分配释放,存放函数的参数值,同部变量等注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放 

 

注意栈区是由编译器管理开辟和释放的,
不要放回地址,因为这个是编译器管理释放的,调用完
函数后该变量就销毁了,地址也被回收了,如果返回地址,
可能访问到一些管理用的其他数据,擅自篡改可能会出现各种各样的问题

2.堆区:


由程序员分配释放,若程序员不释放,程序结束时由操作系统回收在C++中主要利用new在堆区开辟内存

#include<iostream>using namespace std;int* fn(){//利用new关键字可以将数据开辟到堆区域//指针本质也是局部变量,放在栈上,指针保存的数据是放在了堆区int*p= new int (10);return p;
}
int main(){//在堆区中开辟数据int *p=fn();cout<<*p<<endl;system("pause");return 0;
}

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

相关文章:

  • MySQL面试题-重难点
  • 【Linux杂货铺】期末总结篇3:用户账户管理命令 | 组账户管理命令
  • 基于STM32设计的超声波测距仪(微信小程序)(186)
  • Web前端-Web开发HTML基础2-list
  • MAVSDK-Java安卓客户端编译与使用完整示例
  • JavaEE:Spring Web简单小项目实践二(用户登录实现)
  • 深度学习 | CNN 基本原理
  • 解读|http和https的区别,谁更好用
  • 汽车零部件制造企业MES系统主要功能介绍
  • 常见的五种聚类算法总结
  • 智能车存在网络安全隐患,如何应设计出更好的安全防护技术?
  • 通讯的概念
  • Centos7 rpm 安装 Mysql 8.0.28
  • Linux 多进程编程详解
  • C语言之大小端理解
  • GIT相关操作,推送本地分支到远程仓库流程记录学习
  • 网络协议 — Keepalived 高可用方案
  • 前端报错adding CSS “touch-action: none“ to this element解决方案
  • 使用phpMyAdmin操作MYSQL(四)
  • webpack配置代理请求
  • 热门软件缺陷管理工具2024:专业评测与建议
  • 冒泡,选择,插入,希尔排序
  • 【HarmonyOS学习】Calendar Kit日历管理
  • RDMA 高性能架构基本原理与设计方案
  • 【Springboot】事件机制发布与订阅的使用实践
  • 新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?
  • PXE、Kickstart和cobbler
  • 【GameFramework扩展应用】6-3、GameFramework框架增加日志保存功能
  • 将独热码应用到神经网络中
  • 在CSS中,使用Flexbox布局时,可以通过几个属性来控制容器内的项目之间的间距