内存管理:
我们今天来学习一下内存管理:
1. 内存分布:
我们先来看一下我们下面的图片:
这个就是我们的内存,我们的内存分为栈区,堆区,静态区,常量区;
我们的函数栈帧开辟消耗的内存就是我们的栈区的内存,然后我们的堆区,我们的堆区存放的是我们的动态开辟的内存空间,我们的静态区域存放的是我们的静态变量和全局变量,我们的static修饰的静态的变量,(我们的全局变量也是存放到我们的静态区的)。然后我们的常量区,我们的常量区里面可以存储我们的常量字符串,还有我们不可修改的常量。
1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。
(我们看我们这里说的是非静态的局部变量,如果是全局变量的话就不是我们的栈区了,全局变量就是我们的静态区)。
2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口 创建共享共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)
3. 堆用于程序运行时动态内存分配,堆是可以上增长的。
4. 数据段--存储全局数据和静态数据。(静态区);
5. 代码段--可执行的代码/只读常量;(常量区);
2. C语言的动态内存管理方式:
我们先来看一下我们之前C语言的内存管理:
我们看这个代码,我们calloc开辟一段内存空间,我们的calloc函数有两个参数,第一个参数是需要分配的元素的数量,第二个参数是我们的每个元素的大小(单位是字节);我们的calloc函数还会把我们申请到的内存进行初始化,全部初始化为0;
我们的realloc函数的参数,第一个是我们要进行扩容的对象的指针,第二个参数是扩容后我们的数组的大小。(单位是字节);
我们看我们图片里面的代码,我们申请完内存以后我们的p2指针指向我们的这个块内存。
然后我们再对我们的这个内存进行扩展,我们使用realloc函数,这时候扩完后的内存的指针为p3,那我们我们使用完后我们需要free p2吗?,,不需要的。
我们的realloc扩容分为两种,一种是原地的进行扩容,还有一种是异地的扩容,我们看我们的原地扩容,我们的原地扩容是在我们的原本的内存的后面是有满足我们要求的内存的大小的,这时候我们就直接扩容,扩容后我们的p3指向我们的这块内存,但是我们的p2也是指向我们的这块内存的,这时候两个指针指向同一块内存区域,我们只要把他释放一次就够了,至于我们的指针,我们出了函数以后,我们的指针存在于栈区的,他就被销毁了。
对于我们的异地扩容,我们的编译器在看我们的原本的内存的后面没有足够的内存的时候,这时候我们就在异地开辟一段内存,这时候我们就把我们原本的数据拷贝过来,然后把原来的数据销毁。
所以我们上面的代码,我们就不需要free(p2)了;
3. C++内存管理方式:
那我们的new,delete和我们的malloc,free的区别是什么呢?
对于我们的自定义类型:
对于我们的内置类型,我们的两种方式是一样的作用,对于我们的自定义类类型,我们的new还会调用我们的构造函数,对于delect还会调用我们的析构函数。
4. operator new 和 operator delete:
我们这里讲两个函数,我们的new操作符的底层是通过调用我们的函数operator new来实现,然后我们的操作符delect操作符是通过我们的底层operator delete来实现的。
但是我们的函数operator new的底层又是我们的malloc函数,我们又是靠malloc函数来进行实现,但是我们的这里,我们内存开辟失败的时候,我们会抛出以一个异常,这就是我们的operator函数;我们的operator delete函数的底层又是我们的free函数。
5. new和delete的实现原理:
6. malloc/free和new/delete的区别:
我们来看一下我们的malloc/free和我们的new/delete:
我们的malloc函数申请的空间不会初始化,但是我们的new申请的空间会初始化;
我们的new = operator new + 构造函数; operator new = malloc ,但是不同的是我们的malloc函数开辟内存空间失败的时候会返回NULL,但是我们的operator new会返回异常;
delete = operator delete + 析构函数;operator delete = free。
相关文章:
内存管理:
我们今天来学习一下内存管理: 1. 内存分布: 我们先来看一下我们下面的图片: 这个就是我们的内存,我们的内存分为栈区,堆区,静态区,常量区; 我们的函数栈帧开辟消耗的内存就是我们…...
ElementUI 表格中插入图片缩略图,鼠标悬停显示大图
如何在 ElementUI 的表格组件 Table 中插入图片缩略图,通过鼠标悬停显示大图?介绍以下2种方式: 方法1:直接在模板元素中插入 <template><el-table :data"tableData"><el-table-column label"图片…...
从被动响应到主动预见:智能可观测性技术的变革与实践
思维导图 一、引言 🌃 想象一下,在一个深夜 🌙,你的关键业务系统突然出现故障 🚨。传统情况下,你可能会收到大量不相关的告警 📱💬💬💬,然后花费…...
【Linux】五种 IO 模型与非阻塞 IO
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 重新理解 IO🦋 为什么说网络问题的本质是 I/O 问题?🎀 从数据流动看网络通信🎀 网络 I/O 的瓶颈 …...
从零开始开发纯血鸿蒙应用之无框截图
从零开始开发纯血鸿蒙应用 〇、前言二、元素定位1、理论依据2、使用指导 三、认识 ComponentSnapshot1、get 方法2、获取 ComponentSnapshot 实例 四、实现组件截图1、掌握图片编码能力2、保存到图库3、实现组件截图 〇、前言 截图,或者说截屏,已经是每…...
【商城实战(36)】UniApp性能飞升秘籍:从渲染到编译的深度优化
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
无人自助空间智能管理系统解决方案(深度优化版)
无人自助空间智能管理系统解决方案(深度优化版) 一、行业痛点与系统价值 传统管理依赖人工: 人工管理模式下,易出现人为失误,如计费错误、资源分配不当等。同时,人工操作效率低下,在高峰时段…...
pycharm配置镜像源【pycharm最新版(23.2.5及以上)方法】
经常遇到pycharm中无法安装或者安装慢的问题,纠结了好久,终于找到这个解决办法了。 为什么要配置镜像源: 因为Python的包管理工具pip一般从PyPI(Python Package Index)下载安装包,但是PyPI位于国外&#x…...
探索ima.copilot:个人知识库搭建的AI新利器
在信息爆炸的时代,知识的积累与管理成为了个人发展的关键。面对海量的科研文献、工作资料和各类信息,如何高效地构建属于自己的知识体系,是许多人面临的挑战。ima.copilot这款AI工具的出现,为解决这一难题提供了新的思路。它凭借强…...
向量数据库技术系列五-Weaviate介绍
一、前言 Weaviate 是由德国公司 SeMI Technologies 开发的开源向量搜索引擎数据库。它结合了向量搜索和图数据库技术,旨在为 AI 应用提供高效的数据存储和检索能力。具有以下的特点: 高性能向量搜索 Weaviate 支持高效的向量索引和近似最近邻&#x…...
1.Qt SDK 的下载和安装
1Qt 下载官⽹: http://download.qt.io/archive/qt/ 2版本自行选择 3下载对应版本的.exe文件 4下载包下载完成 5双击.exe文件,默认下一步,要注册一个qt的账户 6记住程序安装的位置,后面要配置环境变量 7勾3个(组件自行…...
光场中的核心概念:Macro Pixel与SAI的深度解析与实例应用
一、概念详解:从硬件到算法的核心要素 Macro Pixel(宏像素) Macro Pixel是光场相机的硬件核心单元,由微透镜阵列覆盖的一组传感器子像素构成。每个微透镜对应一个宏像素,其子像素分别记录通过该微透镜不同区域的光线方…...
机器学习(吴恩达)
一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量,是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量,是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…...
Ubuntu 20.04 + mysql 8 默认密码问题
问题描述: Ubuntu20.04安装完mysql8之后无法登录,不知道密码 mysql -u root 原因: 系统默认自动配置好了用户和强密码 解决办法: sudo cat /etc/mysql/debian.cnf查看该文件 利用上面的user 和 passwd 即可登录mysql mysql …...
私有云大数据部署:从开发到生产(Docker、K8s、HDFS/Flink on K8s)
1. 引言 在企业级大数据架构中,私有云部署成为了许多企业的首选,尤其是对数据安全性、合规性、资源控制要求较高的场景。相比于公有云,私有云具备更强的灵活性,能够根据业务需求进行定制化优化。本文将探讨如何在私有云环境下构建大数据平台,包括 Docker 容器化、Kuberne…...
使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法
使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整? 还是按以前的思路写PRD,就还是以前的样子。 现在AI这么强大,产品经理如何使用DeepSeek写PRD文档,产品经…...
拥有一台云服务器能做什么呢?
拥有一台云服务器就像拥有了一台24小时在线的远程电脑,你可以通过互联网随时随地管理它。它的用途非常广泛,无论是个人学习、开发测试,还是企业级应用部署,都能发挥重要作用。以下是常见的应用场景,按需求分类整理&…...
4大观点直面呈现|直播回顾-DeepSeek时代的AI算力管理
直播回顾 2025年2月21日晚上9点30分, 我们迎来了新春后的首场人工智能三人行宣讲活动。 这场直播聚焦于Deepseek开源大模型, 探讨了其对AI算力、算法、数据及应用带来的新发展。 本次直播邀请到了上海赞奇的总经理俞阁总和速石科技陈琳涛,…...
DBeaver安装步骤及连接数据库
一、DBeaver安装步骤 1、双击安装文件“dbeaver-ce-21.3.3-x86_64-setup.exe”,进入安装界面 2、点击ok》下一步》我接受,选择下图选项,为此所有用户使用 3、点击下一步,将重新弹出安装开始界面 4、点击ok》下一步》我接受&…...
玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict
引言 UserDict是Python中collections模块提供的一个强大工具,它是dict的封装类,允许用户自定义字典的行为。通过继承UserDict,开发者可以轻松扩展字典的功能,实现自定义的字典逻辑。本文将详细介绍UserDict的关键用法和特性&…...
如何解决ChatGPTplus/pro o1/o3模型无法识别图片或者文件,限制次数?
你是否遇到ChatGPTplus无法识别图片、或者无法识别文件,甚至回答很简短,o1不思考,GPT-4o不能联网、分析图片和处理文件!感觉非常敷衍。本文教你如何确定自己的账号是否被降智;教你如何降智的原因;教你解决降…...
96.HarmonyOS NEXT工具类设计模式教程:最佳实践与实现
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT工具类设计模式教程:最佳实践与实现 1. 工具类设计原则 1.1 基本原则 原则说明示例单一职责每个类只负责一个功能Win…...
springboot+vue如何前后端联调,手搓前后端分离项目
我们首先在前端安装axios,这个npm就可以!下载完成后。我们用我们之前的页面,然后写一个card,在一个card里面渲染我们的用户数据,我们先写一个查询所有用户信息的一个效果! <el-card class"box-card…...
git备份or打补丁
起因 在工作中使用git pull突然发现仓库出现了找不到代码库问题,但是这个时候有个对策又急着需要,于是乎,就需要备份,拷贝给另一个工程师输出。 git 打补丁操作 工程师A生成补丁文件 touch a.txtgit add a.txtgit commit -m &qu…...
游戏成瘾与学习动力激发研究——多巴胺脉冲式释放与奖赏预测误差机制的神经科学解析
多巴胺脉冲式释放与奖赏预测误差机制的神经科学解析 一、核心概念 多巴胺(Dopamine) 一种关键神经递质,主要功能是调节动机、奖赏学习和行为强化。它并非直接产生“快乐感”,而是驱动“寻求奖赏”的行为动机。 脉冲式释放(Phasic Release) 多巴胺神经元以短暂、高频的爆…...
【C/C++】最长回文子串(leetcode T5)
核心考点:回文字符串匹配中心扩展法 题目描述 给你一个字符串 s,找到 s 中最长的 回文 子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。…...
表的操作以及增删查改
1. 表的操作 1.1 查看所有表 show tables; 1. 2 创建表 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_namefield datatype [ 约束 ] [comment 注解内容 ][, field datatype [ 约束 ] [comment 注解内容 ]] ...) [engine 存储引擎 ] [character set 字符集 ] [collate …...
【人工智能基础2】Tramsformer架构、自然语言处理基础、计算机视觉总结
文章目录 七、Transformer架构1. 替代LSTM的原因2. Transformer架构:编码器 - 解码器架构3. Transformer架构原理 八、自然语言处理基础1. 语言模型基本概念2. 向量语义3. 预训练语言模型的基本原理与方法4. DeepSeek基本原理 九、计算机视觉 七、Transformer架构 …...
Python游戏开发自学指南:从入门到实践(第四天)
Python不仅适用于数据分析、Web开发和自动化脚本,还可以用于游戏开发!虽然Python不是传统意义上的游戏开发语言,但其简洁的语法和丰富的库使其成为初学者学习游戏开发的绝佳选择。本文将为你提供一份全面的Python游戏开发自学指南,…...
向量数据库技术系列四-FAISS介绍
一、前言 FAISS(Facebook AI Similarity Search)是由Facebook AI Research开发的一个开源库,主要用于高效地进行大规模相似性搜索和聚类操作。主要功能如下: 向量索引与搜索:FAISS提供了多种索引和搜索向量的方法&…...
【网络安全 | 漏洞挖掘】价值14981$的Google点击劫持漏洞
未经许可,不得转载。 文章目录 点击劫持前言漏洞1攻击场景漏洞2攻击场景漏洞3攻击场景漏洞4攻击场景漏洞5攻击场景漏洞6攻击场景点击劫持 点击劫持是一种恶意的用户界面攻击技术,也被称为 “UI 覆盖攻击” 或 “透明劫持”。 攻击者通过创建一个看似正常的网页,并在其中嵌…...
CMake 保姆级教程
CMake 是一个跨平台的构建工具,用于生成适合不同平台和编译器的构建系统文件(如 Makefile 或 Visual Studio 项目文件)。 在 Windows 下使用 CMake 构建项目时,CMake 会根据 CMakeLists.txt 文件生成适合 Windows 的构建系统文件&…...
IntelliJ IDEA 2023.3.1安装指南从下载到配置的完整教程(附资源下载)
安装 IntelliJ IDEA 2023.3.1 非常简单,以下是详细的安装步骤,适用于 Windows、macOS 和 Linux 系统。 1. 下载 IntelliJ IDEA IntelliJ IDEA下载链接:https://pan.quark.cn/s/3ad975664934 选择适合你的操作系统的版本: Ultimat…...
springboot树形结构 支持模糊查询,返回匹配节点和父节点,其他节点不返回
package com.me.meterdemo.ds; import java.util.ArrayList; import java.util.List;public class TreeNode {private Long id;private String name;private Long parentId;private List<TreeNode> children new ArrayList<>();// 构造方法public TreeNode(Long i…...
linux 命令 touch
Linux 的 touch 命令主要用于 创建空文件 或 修改文件的时间戳(访问时间、修改时间)。以下是其核心用法和实用示例: 基本语法 touch [选项] 文件名... 核心功能 1. 创建空文件 如果文件不存在,则创建空文件;如果存在…...
3.14-1列表
列表 一.列表的介绍和定义 1 .列表 类型: <class list> 2.符号:[] 3.定义列表: 方式1:[] 通过[] 来定义 list[1,2,3,4,6] print(type(list)) #<class list> 方式2: 通过list 转换 str2"12345" print(type(str2)) #<class str> list2lis…...
完整的模型验证套路
模型验证 0. 写在前面 经过之前的代码编写,我们已经建立了一套模型,下面就开始对我们编写的模型进行验证。 代码:代码链接 1. 验证模型 我们首先运行代码(epoch 20)得到结果如下: Files already down…...
python2和python3的区别
python2和python3的区别 核心区别Python 2 示例Python 3 示例通俗解释专业术语1. 打印方式print "Hello"print("Hello")Python 3必须加括号,像“按钮操作”;Python 2像“直接喊话”。print从语句变为函数,支…...
【时时三省】(C语言基础)用printf函数输出数据3
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 ( 5 ) e格式符。 用格式声明%e指定以指数形式输出实数。如果不指定输出数据所占的宽度和数字部分的小数位数,许多C编译系统(如VisualC)会自动给出数字部分…...
【差分约束】 P3275 [SCOI2011] 糖果|省选-
本文涉及知识点 差分约束 P3275 [SCOI2011] 糖果 题目描述 幼儿园里有 N N N 个小朋友, lxhgww \text{lxhgww} lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求&…...
找第一个只出现一次的字符(信息学奥塞一本通-1130)
【题目描述】 给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。 【输入】 一个字符串,长度小于100000。 【输出】 输出第一个仅出现一次的字符,若没有则输出no。 【输入样例】 abcabd 【输出样…...
【MySQL】多表操作 —— 外键约束
目录 多表关系一对一关系一对多/多对一关系多对多关系 外键约束基本概念一对多/多对一创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多对多创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多表关系 MySQL 多表之间的关系可以概括为&#…...
自己动手打造AI Agent:基于DeepSeek-R1+websearch从零构建自己的Manus深度探索智能体AI-Research
第一章:AI Agent基础与DeepSeek-R1架构解析(1/10) 1.1 AI Agent技术演进与核心价值 人工智能代理(AI Agent)经历了从规则驱动到数据驱动的范式转移。早期基于专家系统的符号主义方法(如MYCIN医疗诊断系统…...
SpringSecurity配置(校验数据库用户信息)
文末有本篇文章的项目源码文件可供下载学习 通过SpringSecurity快速入门案例我们已经实现了基于内存的校验用户信息,但在实际项目中我们需要校验从数据库中获取的用户信息,这里我们主要是两步操作: 1.需要我们实现UserDetailsService的loadUserByUsername方法,在方法中以前端…...
中考语文的考点及相应的解题技巧
1 考点分布 1.1 作文(60 分左右) 考点:立意、选材、结构、语言表达等。要求立意深刻、新颖,选材真实、典型,结构清晰、完整,语言流畅、生动。 解题技巧:认真审题,理解题目要求和限…...
PackageManagerService
首语 PackageManagerService(以下简称PMS)是Android最核心的系统服务之一,它是应用程序包管理服务,管理手机上所有的应用程序,包括应用程序的安装、卸载、更新、应用信息的查询、应用程序的禁用和启用等。 职责 在Android系统启动过程中扫…...
基于大模型的智能客服搭建
引言:智能客服的范式转变 在数字经济浪潮中,客户服务正经历从"人力密集型"向"技术驱动型"的深刻转型。据IDC最新报告,全球智能客服市场规模预计将在2028年突破1200亿美元,年复合增长率达28.6%。这种增长背后…...
Vagrant+VMWare 安装Ubuntu24.04
背景介绍 对于众多 Windows 用户来说, 有时候需要用到 Linux 环境做一些开发或者测试. WSL 目前能覆盖到很大一部分使用场景, 但是仍然有一些场景需要用虚拟机才能解决. 开发者的痛点往往是对于虚拟机环境的配置和管理, 因为手动安装需要很长的时间, 并且每次安装完成之后需要…...
数字化转型 - 数据驱动
数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网:绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…...
【软考-架构】11.3、设计模式-新
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 💯考试真题题外话 项目中的应用 在实际项目中,我应用过多种设计模式来解决不同…...