C++基础(1)——程序内存模型和引用

news2024/10/6 12:32:03

前言

本文主要介绍了C++中内存模型的四区及存放的数据,引用的基本语法。

 

1.1:代码区(程序运行前)

1:存放CPU执行的机器指令

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

3:代码区是只读的,使其只读的原因是防止程序意外修改了他的指令

1.2:全局区(程序运行前)

1:全局变量和静态变量

2:全局区还包含了常量区,字符串常量和其他常量(const修饰)也存放在此

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

4:const修饰的局部变量还是在栈区,const修饰全局变量放在全局区

字符串常量存在全局区

1.3:栈区(程序运行之后)

 1:由编译器自动分配和释放,存放函数的参数,局部变量、形参

 函数调用时栈帧切换

函数返回时(返回结果保存在eax寄存器中)

 函数栈帧中的内容

1.4:堆区(程序运行之后)

1:由程序员分配释放,若程序员不释放,程序结束之后由操作系统回收

2:C++中主要利用new在堆区开辟内存

局部变量存放堆区数据地址

1.5:new、delete关键字

 *p++和*++p的区别,++的优先级大于*

 如果指针p指向的是一个数据,释放对应内存用delete p,delete [] p 用于释放数组

2.1:引用的基本语法

int a = 10;
int &b = a;

引用是给一个变量取别名,引用在定义的时候就要初始化,初始化之后不能进行修改

2.2:引用做函数参数和返回值

形参作为实参的一个别名

引用和指针修饰函数返回值

函数的返回值是引用,这个函数可以作为左值

2.3:引用的本质和常量引用

引用本质是一个指针常量 int * const p = &a,指针的指向不能改,指针指向的值可以修改

常量引用:用const来修饰引用,防止形参误操作修改了实参

总结

以上就是本文的全部内容,非常感谢你能看到这。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664111.html

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

相关文章

在Centos Stream 9上Docker的实操教程(七) - Docker上实现MYSQL实现主从复制

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

第3章 作业(268EF)【网络安全】

第3章 作业【网络安全】 前言推荐第3章 作业268EF如何不用计算机计算求模 最后 前言 2023-6-19 15:49:17 以下内容源自《网络安全》 仅供学习交流使用 推荐 第2章 作业(2456)【网络安全】 第3章 作业 2 3.2什么是MAC? MAC:消息认证码…

网页设计实习周记范文5篇(合集)

网页设计实习周记(一) 本周主要是做网站维护更新。 网站要注意经常维护更新内容,保持内容的新鲜,不要一做好就放在那儿不变了,只有不断地给它补充新的内容,才能够吸引住浏览者。 通过目前的实习,在设计方面我感觉自己有…

探究设备管理系统在工业领域的应用

在现代工业领域,设备是生产过程中至关重要的组成部分。有效管理和维护设备对于保障生产的连续性、提高生产效率和降低成本至关重要。而设备管理系统的引入为企业提供了一种综合性的解决方案,能够全面监控、维护和优化设备的运行状态。本文将探讨设备管理…

Linux MySQL 备份与恢复 日志管理

数据库备份 备份策略 完全备份 每次备份都备份完整的数据库。 备份数据最大,每次都要完整备份。但是恢复最方便差异备份 只备份上一次完全备份后的更新数据。 第一次完整备份,之后备份第一次没有备份的内容增量备份 每次备份只备份上一次完全备份或增量备…

终于!Ubuntu下水“不可变”!

来源丨51CTO技术栈(ID:blog51cto) 要说今年Linux哪个概念火?肯定少不了“不可变”。Ubuntu也终于按捺不住了。 就在6月初,Ubuntu的母公司Canonical宣布:将很快加入不可变的发行版潮流。 虽然一开始Snap的首…

Spring学习笔记——从配置文件到注解开发 创建对象+成员变量赋值 增强方法

目录 引出Spring入门案例初识Spring入门案例1----用配置文件实现 Druid JDBCTemplate dao1.之前的方式:new对象2.用配置文件的方法把new对象交给Spring3.如果要用对象,从spring的容器中获取ac.getBean("userDao");4.实体类和dao层的代码--问…

【Leetcode60天带刷】day11栈与队列——20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

题目: 20. 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个…

ARM存储器概论

一、ARM指令集概述 1.指令集 指令 (1)能够指示处理器执行某种运算的命令称为指令(如加、减、乘 ...) (2)指令在内存中以机器码(二进制)的方式存在 (3)每…

奉加微电子蓝牙芯片SDK例程怎么用

摘要:本文以定时器例程为例,介绍奉加微电子蓝牙芯片PHY6222的例程怎么样打开,怎么样编译,怎么样烧录。 硬件如上图,软件使用了两个,一个是keil5,另一个是PhyPlusKit(奉加微电子的烧录…

直到我买了服务器才知道有个自己的服务器有多爽!

一、我为什么要买服务器 我在大学时候就买了一个自己的小服务器,其实就是电视盒子刷的centos,当时还花了两百多大洋呢!当时那个服务器只是用来放自己的博客,但是那个服务器性能太垃圾了,也就只能放个网页了&#xff0…

《向量数据库》——Milvus 数据迁移指南

目录 Milvus 数据迁移指南 第 1 步:关闭当前版本 Milvus 第 2 步:下载配置文件 第 3 步:确认、更新 MySQL/SQLite 服务端地址 第 4 步:下载并启动新版 Milvus 第 5 步:安装对应版本的 Python SDK 第 6 步&#…

数据库表的操作

目录 前言 1.创建表 2.查看表 2.1查看表结构 2.2查看表中插入的数据 3.修改表 4.删除表 总结 前言 前面已经介绍了对数据库的操作,今天我们介绍的是数据库表的操作,数据库表简单可以理解为存储数据的介质。有了这个认识之后,下面我们…

[保姆级] Vue3 开发文档

大家好,我是沐华。最近一个粉丝公司项目由 Vue2 升级到 Vue3 了,他一下子不适应,有好多不会用的,所以我就写了这篇开发文档,包含了 Vue3 项目开发中使用的所有语法,希望所有像他一样还不熟的伙伴快速上手 V…

电子版个人简历模板范文十篇

电子版个人简历模板范文篇1 基本信息 真实姓名:__性别:男 年龄:25岁身高:170CM 婚姻状况:未婚户籍所在:贵州盘县 学历:中专工作经验:1-3年 联系地址:贵州贵阳 求职意向 最…

不是吧,你们对交换机的误解也太深了!

我的网工朋友大家好。 交换机和路由器系列,在我们这个公众号里可谓是C位选手,写过的内容有很多,从0基础小白都看得懂的趣味解读,到老网工最爱的实用命令,一应俱全。 但是好像从来没分析过,关于交换机&…

paraview调整color map文字颜色

paraview默认的背景颜色一般是灰色的,color map的数字及文字默认是白色的,如下: 然而,当我们将背景改为白色,往外输出图片时,color map的文字就看不见了,因此需要调整color map的文字为其他颜色…

<Linux开发>驱动开发 -之-Linux INPUT 子系统

<Linux开发>驱动开发 -之-Linux INPUT 子系统 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程…

LNMP (Nginx网站服务)

目录 1.1 Nginx的简介 1.2 Apache与Nginx的区别 Nginx对比Apache的优势: 1.3 Nginx的进程 Nginx的两个进程: 同步,异步,阻塞,非阻塞的概念补充 阻塞与非阻塞 同步和异步 2.1 编译安装Nginx 2.1 .1 关闭防火墙…

mysql索引优化系列(二)

一、limit优化 之前的member会员表,联合索引为KEY idx_name_age_address (name,age,address),表里插入了十万条数据,一般情况下分页查询的sql语句: select * from member limit 90000,10; explain select * from member limit 9…