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.mzph.cn/news/872565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql具体数据操作和表的约束(上)

表中数据的增删改查 插入数据(添加数据) 1.按指定字段插入数据:insert into <表名> (字段1,字段2,...) values (),(),.... 注意1:values后面的括号是指行数(几条记录),一个括号表示插入一条记录,多个括号以此类推 注意2:values后面括号内部插入的数据…

【python学习】第三方库之pandas库的定义、特点、功能、使用场景和代码示例

引言 pandas是一个强大的Python库&#xff0c;用于数据分析和数据处理。它基于NumPy&#xff0c;提供了灵活的数据结构&#xff08;Series和DataFrame&#xff09;和数据操作功能&#xff0c;是数据科学和机器学习中不可或缺的工具 文章目录 引言一、安装pandas第三方库二、pan…

nginx反向代理实例

一. 准备工作 1.1 ngnix的安装 nginx基本概念和安装-CSDN博客 1.2 安装tomcat tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;适用于中小型系统和并发访问用户不是很多的情况。 前往官网网站&#xff1a;Apache Tomcat - Ap…

C++迈向精通:模板中的引用与remove_reference原理

remove_reference 原理 模板中的引用参数 在模板中&#xff0c;双 &‘ 会被解析为“引用”&#xff0c;这个“引用”可以是“左值”引用&#xff0c;也可以是“右值”引用。 例如&#xff1a; template <typename T> void func(T &&a) {std::cout <&l…

从零开始接触人工智能大模型,该如何学习?

人工智能是计算机科学领域中最具前瞻性和影响力的技术之一。它是一种智慧型算法&#xff0c;能够模拟人类的思维过程&#xff0c;处理大量的数据和信息&#xff0c;从而发现隐藏在其中的规律和趋势。人工智能的应用范围非常广泛&#xff0c;包括语音识别、图像识别、自然语言处…

《简历宝典》14 - 简历中“项目经历”,实战讲解,前端篇

上一节我们针对项目经历做了内功式的讲解&#xff0c;为了加深读者的印象&#xff0c;可以更轻松的套用到自己的简历上&#xff0c;本章继续从前端开发、Java开发以及软件测试的三个角度&#xff0c;再以校招和初级、中级以及高级三个维度分别入手&#xff0c;以实战讲解的形式…

gihub导入gitee仓库实现仓库同步

昨天在GitHub里导入了gitee仓库&#xff0c;但是在仓库同步这里卡了很久&#xff0c;因为网上大多数都是从github导入gitee&#xff0c;然后github生成token放入实现同步&#xff0c;但是我找到一种更为方便的&#xff01; 1.首先找到项目文件下的.git文件里的config文件 2.在…

Python实战MySQL之数据库操作全流程详解

概要 MySQL是一种广泛使用的关系型数据库管理系统,Python可以通过多种方式与MySQL进行交互。本文将详细介绍如何使用Python操作MySQL数据库,包括安装必要的库、连接数据库、执行基本的CRUD(创建、读取、更新、删除)操作,并包含具体的示例代码,帮助全面掌握这一过程。 准…

dom4j 操作 xml 之按照顺序插入标签

最近学了一下 dom4j 操作 xml 文件&#xff0c;特此记录一下。 public class Dom4jNullTagFiller {public static void main(String[] args) throws DocumentException {SAXReader reader new SAXReader();//加载 xml 文件Document document reader.read("C:\\Users\\24…

基于jeecgboot-vue3的Flowable流程支持bpmn流程设计器与仿钉钉流程设计器-编辑多版本处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、前端编辑带有仿钉钉流程的处理 /** 编辑流程设计弹窗页面 */const handleLoadXml (row) > {console.log("handleLoadXml row",row)const params {flowKey: row.key,ver…

搜集日志。

logstash 负责&#xff1a; 接收数据 input — 解析过滤并转换数据 filter(此插件可选) — 输出数据 output input — decode — filter — encode — output elasticsearch 查询和保存数据 Elasticsearch 去中心化集群 Data node 消耗大量 CPU、内存和 I/O 资源 分担一部分…

四、GD32 MCU 常见外设介绍

系统架构 1.RCU 时钟介绍 众所周知&#xff0c;时钟是MCU能正常运行的基本条件&#xff0c;就好比心跳或脉搏&#xff0c;为所有的工作单元提供时间 基数。时钟控制单元提供了一系列频率的时钟功能&#xff0c;包括多个内部RC振荡器时钟(IRC)、一个外部 高速晶体振荡器时钟(H…

Docker修改Postgresql密码

在Docker环境中&#xff0c;对已运行的PostgreSQL数据库实例进行密码更改是一项常见的维护操作。下面将详述如何通过一系列命令行操作来实现这一目标。 修改方式 查看容器状态及信息 我们需要定位到正在运行的PostgreSQL容器以获取其相关信息。执行以下命令列出所有正在运行…

Mongodb多键索引中索引边界的混合

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第93篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

安全防御---防火墙双击热备与带宽管理

目录 一、实验拓扑 二、实验需求 三、实验的大致思路 四、实验过程 4、基础配置 4.1 FW4的接口信息 4.2 新建办公&#xff0c;生产&#xff0c;游客&#xff0c;电信&#xff0c;移动安全区域 4.3 接口的网络配置 生产区:10.0.1.2/24 办公区:10.0.2.2/24 4.4 FW4的…

极地生产力自主采样系统的观测:融池比例统计 MEDEA 融池比例数据集

Observations from the Autonomous Polar Productivity Sampling System. 极地生产力自主采样系统的观测结果 简介 该项目是美国国家航空航天局 ICESCAPE 大型项目的一部分&#xff0c;旨在研究浮游植物丰度的长期季节性变化与整个生长季节在波弗特海和楚科奇海测量到的海冰…

Spring与设计模式实战之策略模式

Spring与设计模式实战之策略模式 引言 在现代软件开发中&#xff0c;设计模式是解决常见设计问题的有效工具。它们提供了经过验证的解决方案&#xff0c;帮助开发人员构建灵活、可扩展和可维护的系统。本文将探讨策略模式在Spring框架中的应用&#xff0c;并通过实际例子展示…

CREC晶振产品分类

CREC晶振大类有石英晶体谐振器、石英晶体振荡器、石英晶体滤波器 其中石英晶体谐振器&#xff1a; KHZ石英谐振器 车规级32.768KHz石英谐振器 专为汽车RTC应用而设计&#xff0c;通过AECQ-200可靠性测试&#xff0c;满足汽车电子的高标准时频需求&#xff0c;为客户提供可靠…

前后端,数据库以及分布式系统

1. 前端&#xff08;Frontend&#xff09; 定义&#xff1a; 前端是用户直接与之交互的部分&#xff0c;通常在浏览器中运行。它负责呈现和展示数据&#xff0c;与用户进行交互。 关键点&#xff1a; HTML/CSS/JavaScript&#xff1a; HTML定义了页面结构&#xff0c;CSS负责…

工业网络通信教学平台-工业互联网综合教学的实验平台-工业互联网应用实训

工业互联网&#xff08;Industrial Internet&#xff09;&#xff0c;也称为工业物联网或IIoT&#xff0c;是一个开放的、全球化的工业网络&#xff0c;将人、数据和机器进行连接&#xff0c;将工业、技术和互联网深度融合。 工业互联网产业发展离不开信息技术产业人才&#xf…