C++核心编程

news2024/12/31 5:18:45

一、内存分区模型

概述:C++程序在执行时,将内存划分为4个区域

程序运行前:

代码区:存放函数体的二进制代码,由操作系统管理

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

②只读。使其只读,以防止程序意外修改其指令

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

①存放全局变量和静态变量

②包含常量区,字符串常量与其他常量也在其中

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

对于这些代码,运行后

可以发现全局变量静态变量是在同一个区的

而对于常量以及const修饰的变量

执行后:

可以发现:

常量const修饰全局变量都在一个区里(即全局区)

const修饰的局部变量局部变量在一个区里

程序运行后:

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

注意:不要返回栈区局部变量的地址

例:

int* func() // 而如果有形参,则形参数据也存放在栈区
{
    int a = 500; // 局部变量,存放在栈区,程序执行完后自动释放
    return &a;     // 返回局部变量的地址
}
int main()
{
    int* p = func();
    cout << *p << endl;    // 当编译器做保留时,数据还能打印1次
    cout << *p << endl; // 将是乱码,非法访问了
    return 0;
}

ps:不过经我测试,在vs2022中,x64平台下栈区数据始终保留,无论打印多少次都行;而改到x86下,只能打印1次,第2次开始就是非法访问

堆区:由程序员自行分配与释放,若不进行释放则在程序结束时由操作系统回收

在c++中主要使用new在堆区开辟内存

int* func()
{
    //       new 类型(初识值);返回的是所开辟内存的地址  
    int* p = new int(10);
    // 而指针p仍在栈上,不过其所保留的地址在堆上
    return p;
}
int main()
{
    int*p= func();
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    return 0;
}

无论执行多少次程序,结果总是10

意义:不同区域存放的数据有不同的生命周期,使编程更为灵活

new操作符

作用:在堆区开辟数据,返回对应类型的指针

对于堆区开辟的数据,程序员手动开辟,手动释放

释放使用操作符delete

  1. new整型数据

int* func()
{
    int* p = new int(120);
    return p;
}
void test1()
{
    int* p = func();
    cout << *p;

    delete p; // 释放p空间,不可再被使用
}
  1. new一个数组

void test2()
{
    int* parr = new int[10]; //new一个有10个数据的整型数组
    for (int i = 0; i < 10; i++)
    {
        parr[i] = i + 10; // 赋值,从10-19
    }
    for (int i = 0; i < 10; i++)
    {
        cout << parr[i] << endl; // 打印
    }
    // 释放堆区数组  - 要加[]
    delete[] parr;
}

释放一个数组的数据,要写delete[] arr;

delete后加个[]

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

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

相关文章

组合预测 | MATLAB实现EMD-KPCA-LSTM、EMD-LSTM、LSTM多输入单输出回归预测对比

组合预测 | MATLAB实现EMD-KPCA-LSTM、EMD-LSTM、LSTM多输入单输出回归预测对比 目录 组合预测 | MATLAB实现EMD-KPCA-LSTM、EMD-LSTM、LSTM多输入单输出回归预测对比预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现EMD-KP

传输层协议 TCP UDP

目录 协议前菜 端口号 ​编辑端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof 传输层协议 UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 TCP协议 TCP协议概念 TCP协议段格式 标志…

深度分析中国高端投教市场第一股“九方财富”的投资价值

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;九方财富&#xff08;09636&#xff09;已于3月10在港交所成功IPO上市&#xff0c;并成为了“中国在线高端投教市场第一股”。 作为中国领先的在线投资决策方案提供商&#xff0c;九方财富…

一起来学习配置Combo接口吧!

Combo接口是一个光电复用的逻辑接口&#xff0c;一个Combo接口对应设备面板上一个GE电接口和一个GE光接口。电接口与其对应的光接口是光电复用关系&#xff0c;两者不能同时工作&#xff08;当激活其中一个接口时&#xff0c;另一个接口就自动处于禁用状态&#xff09;&#xf…

常用存储芯片-笔记本上固态硬盘PTS11系列推荐

在存储领域中&#xff0c;除了存储颗粒之外&#xff0c;还有一种极其重要的芯片&#xff1a;存储控制芯片。存储控制芯片是CPU与存储器之间数据交换的中介&#xff0c;决定了存储器最大容量、存取速度等多个重要参数。特别是在AI、5G、自动驾驶时代&#xff0c;对于数据处理及存…

2.HTML页面组成

html页面组成html简介-基础-元素html属性-标题-段落html链接-头部-图像html表格-列表-区块html表单-框架-颜色html字符实体-url前言&#xff1a; 在学习爬虫前&#xff0c;我们还需要了解HTML页面&#xff0c;学习它的组成部分以及各部分的意思和使用方法&#xff0c;代码我放在…

C++回顾(十八)—— 文件操作

18.1 I/O流概念和流类库结构 1 概念 程序的输入指的是从输入文件将数据传送给程序&#xff0c;程序的输出指的是从程序将数据传送给输出文件。 C输入输出包含以下三个方面的内容&#xff1a; &#xff08;1&#xff09;对系统指定的标准设备的输入和输出。即从键盘输入数据&am…

前端初学者 sdk 的使用

目录结构&#xff1a; package.json {"name": "ivanfor666","version": "1.0.0","description": "","main": "dist/index.cjs.js","module": "dist/index.esm.js",&quo…

Kafka 分区机制

Kafka 分区机制分区策略轮询策略随机策略按消息键保序策略基于地理位置的分区策略主题 (Topic) &#xff1a;承载真实数据的逻辑容器&#xff0c;主题下还分 n 个分区 Kafka 消息的三级结构&#xff1a; 主题 - 分区 - 消息主题下的每条消息只会保存在某个分区中&#xff0c;…

案例06-复用思想的接口和SQL

目录 一&#xff1a;背景介绍 二&#xff1a;思路&方案 三&#xff1a;过程 1.Controller层接口的复用 2.Mapper层sql语句的复用 四&#xff1a;总结 一&#xff1a;背景介绍 我们在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么&#xff0c;就像我…

VPC专有网络介绍

基本概念 VPC&#xff1a;专有网络&#xff0c;云上用户自定义的私有网络。 vSwitch&#xff1a;交换机&#xff0c;组成专有网络的基础网络设备&#xff0c;交换机可以连接不同的云资源&#xff0c;在专有网络内创建云资源时&#xff0c;必须指定云资源所在连接的交换机。 vR…

微服务与分布式——SpringCloud

前提&#xff1a; 当项目逐渐变得庞大起来&#xff0c;简单的 spring 框架可能就不够用了&#xff0c;所以就需要用到分布式架构&#xff0c;我们这里简单介绍一下 springcloud 以及 springcloud 需要依赖的一些组件 目录&#xff1a; 1、分布式简介 2、Eureka 注册中心 3、R…

什么样的人更适合创业?那类人创业更容易成功?

创业是一项充满风险和机遇的事业&#xff0c;成功的创业者需要具备一定的素质和能力。那么&#xff0c;什么样的人更适合创业&#xff1f;哪类人创业更容易成功呢&#xff1f;本文将为您介绍几个适合创业的人群和成功创业者的共同特点。 具有创新精神的人 创业需要不断创新&am…

产品大本营丨计讯物联智慧灯杆网关全系列

在随着智慧城市不断推进&#xff0c;数字信息基础设施已然成为重要驱动。面对新一轮的智慧城市建设&#xff0c;技术赋能结合机制创新&#xff0c;驱动着追城市中生产方式、生活方式、管理方式的变革以及生产要素的配置&#xff0c;全面提升城市的信息化水平。 在新型智慧城市的…

webpack指南(项目篇)——webpack在项目中的运用

系列文章目录 webpack指南&#xff08;基础篇&#xff09;——手把手教你配置webpack webpack指南&#xff08;优化篇&#xff09;——webpack项目优化 文章目录系列文章目录前言一、配置拆分二、修改启动命令三、定义环境变量四、配置路径别名总结前言 前面我们对webpack的基…

Baumer工业相机堡盟相机如何使用自动曝光功能(自动曝光优点和行业应用)(C++)

项目场景 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机&#xff0c;可用于各种应用场景&#xff0c;如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能&#xff0c;可以实时传输高分辨率图像。此外&#xff0c;该相机还具…

Microsoft Word RTF Font Table Heap Corruption - 漏洞解析(CVE-2023-21716)

写在最前 如果你是信息安全爱好者&#xff0c;如果你想考一些证书来提升自己的能力&#xff0c;那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里&#xff1a; https://discord.gg/9XvvuFq9Wb我拥有 OSCP&#xff0c;OSEP&#xff0c;OSWE&#xff0c;OSED&…

每日学术速递3.10

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.RO 1.Diffusion Policy: Visuomotor Policy Learning via Action Diffusion 标题&#xff1a;扩散策略&#xff1a;通过动作扩散进行视觉运动策略学习 作者&#xff1a;Cheng Chi, Si…

一文解析ethtool 命令的使用

命令简介 ethtool命令用于查询和控制网络设备驱动程序和硬件设置&#xff0c;尤其是有线以太网设备&#xff0c;devname网卡的名称。网卡就像是交换机的一个端口&#xff0c;正常使用我们只是配置网卡IP地址等信息&#xff0c;网卡的速率、双工模式等我们并不关心。通过ethtoo…

3.7day05

二维数组&#xff1a;int arr[10] {1,2,3,5,6,7};{1,2,3,5,6,7};{1,2,3,5,6,7};{1,2,3,5,6,7};{1,2,3,5,6,7};定义语法&#xff1a;int arr[2][3] {{2, 5, 8},{7, 9 10}};int arr[3][5] {{2, 3, 54, 56, 7 }, {2, 67, 4, 35, 9}, {1, 4, 16, 3, 78}};打印&#xff1a;for(i …