C++ 与 Python 内存分配策略对比
内存管理是编程中的一个核心概念,它直接影响程序的性能、稳定性和资源利用率。C++ 和 Python 作为两种广泛使用的编程语言,在内存分配和管理方面采用了截然不同的策略。
C++ 内存分配策略
C++ 赋予程序员对内存的精细控制能力,同时也带来了更大的责任。其主要的内存分配策略包括:
-
静态内存分配 (Static Memory Allocation):
-
时机: 编译时。
-
存储位置: 程序的静态存储区(数据段或BSS段)。
-
对象: 全局变量、文件作用域的 static 变量、类静态成员变量、函数内部的 static 局部变量。
-
生命周期: 从程序开始到程序结束。
-
特点: 内存大小在编译时固定,分配和释放由编译器自动处理,速度快。
-
栈内存分配 (Stack Memory Allocation):
-
时机: 运行时,函数调用时。
-
存储位置: 程序栈。
-
对象: 函数内部的非 static 局部变量、函数参数。
-
生命周期: 函数调用开始时分配,函数调用结束时自动释放。
-
特点: 由编译器自动管理,分配和回收速度非常快(仅次于静态分配),遵循后进先出 (LIFO) 原则。栈空间有限,过大的局部变量或过深的递归可能导致栈溢出 (stack overflow)。
-
堆内存分配 (Heap Memory Allocation) / 动态内存分配 (Dynamic Memory Allocation):
-
时机: 运行时,由程序员显式请求。
-
存储位置: 程序堆。
-
对象: 通过 new 操作符(C++)或 malloc()/calloc()/realloc() (C风格) 分配的内存。
-
生命周期: 从显式分配开始,直到显式释放(通过 delete/delete[] 或 free())或程序结束(操作系统回收)。
-
特点:
-
灵活性高: 可以在运行时决定分配内存的大小,并且可以分配较大块的内存。
-
程序员管理: 必须手动管理内存的分配和释放。
-
潜在问题:
-
内存泄漏 (Memory Leaks): 分配了内存但忘记释放。
-
悬空指针 (Dangling Pointers): 内存已释放,但仍有指针指向该区域。
-
重复释放 (Double Free): 对同一块内存多次释放。
-
内存碎片 (Memory Fragmentation): 频繁分配和释放不同大小的内存块可能导致堆中出现许多不连续的小空闲块。
-
C++ new 和 delete:
-
new: 分配内存并调用对象的构造函数。
-
delete: 调用对象的析构函数并释放内存。
-
new[] 和 delete[]: 用于动态分配和释放数组。
-
自定义内存分配 (Custom Memory Allocation):
-
std::allocator: C++ 标准库容器(如 std::vector, std::map)使用分配器 (std::allocator) 来封装内存的分配和释放逻辑。默认分配器使用全局的 operator new 和 operator delete。程序员可以提供自定义分配器以改变容器的内存分配行为。
-
重载 operator new 和 operator delete: 可以为特定的类或全局重载这些操作符,以实现自定义的内存管理策略,例如内存池。
-
内存池 (Memory Pool): 预先分配一大块内存,然后将其分割成固定大小的小块进行管理。当需要分配对象时,从池中取出一块;释放时,归还给池。这可以提高分配/释放小对象的效率,并减少内存碎片。
-
智能指针 (Smart Pointers - 现代 C++):
-
为了简化动态内存管理并避免上述潜在问题,现代 C++ 推荐使用智能指针(位于 <memory> 头文件):
-
std::unique_ptr: 独占所指向对象的所有权。当 unique_ptr 离开作用域或被销毁时,它所管理的对象会被自动删除。
-
std::shared_ptr: 通过引用计数共享所指向对象的所有权。当最后一个指向对象的 shared_ptr 被销毁时,对象才会被删除。
-
std::weak_ptr: 一种非拥有型的智能指针,它指向由 shared_ptr 管理的对象,但不会增加对象的引用计数。用于解决 shared_ptr 的循环引用问题。
Python 内存分配策略
Python 的内存管理是高度自动化的,开发者通常不需要直接干预内存的分配和释放。其核心机制包括:
-
Python 私有堆空间 (Python Private Heap):
-
Python 解释器(特指 CPython)在内部维护一个私有堆空间,所有的 Python 对象和数据结构都存储在这个堆中。
-
这个私有堆由 Python 内存管理器进行管理。程序员无法直接控制这块内存的物理布局,但可以通过 Python 提供的 API 与之交互。
-
操作系统负责为 Python 的私有堆分配大块内存,而 Python 内存管理器负责在这块已分配的内存中进一步管理对象的存储。
-
对象分配器 (Object Allocators):
-
Python 对于不同类型的对象(特别是小对象)有专门的分配策略,以提高效率和减少内存碎片。
-
小对象分配器 (Small Object Allocator / obmalloc):
-
对于小于特定大小(CPython 中通常是 512 字节)的对象,Python 使用一个称为 obmalloc 的优化分配器。
-
obmalloc 将内存划分为不同大小等级的内存池 (pools),每个内存池包含固定大小的内存块 (blocks)。
-
当需要为一个小对象分配内存时,Python 会从对应大小等级的内存池中获取一个空闲块。
-
这些内存池本身是从更大的内存区域(称为 arenas,通常是 256KB)中划分出来的。
-
这种策略非常高效,因为它避免了直接调用底层操作系统内存分配函数的开销,并且能有效减少小对象的内存碎片。
-
大对象分配: 对于大于 512 字节的对象,Python 通常会使用标准的 C 库函数 malloc()(或者类似的系统调用)来分配内存。
-
自动垃圾回收 (Automatic Garbage Collection):
Python 主要依赖以下两种机制进行自动垃圾回收:
-
引用计数 (Reference Counting):
-
这是 Python 主要的垃圾回收机制。
-
每个 Python 对象都有一个与之关联的引用计数器。
-
当一个对象被引用时(例如,赋值给一个变量、作为参数传递、放入容器中),其引用计数增加。
-
当一个对象的引用被移除时(例如,变量超出作用域、del 语句删除引用、对象从容器中移除),其引用计数减少。
-
当一个对象的引用计数变为 0 时,该对象就成为不可达对象,其占用的内存会被立即回收。 Python 会调用该对象的析构方法(__del__,如果定义了的话),然后释放内存。
-
优点: 简单、垃圾对象可以被及时回收。
-
缺点:
-
循环引用 (Circular References): 如果两个或多个对象相互引用(例如,对象 A 引用对象 B,同时对象 B 也引用对象 A),即使它们不再被程序的其他部分引用,它们的引用计数也永远不会变为 0,从而导致内存泄漏。
-
维护引用计数的开销: 每次引用和取消引用都需要更新计数器,这会带来一定的性能开销。
-
分代垃圾回收 (Generational Garbage Collection):
-
为了解决引用计数的循环引用问题,Python 还引入了分代垃圾回收机制。
-
基本思想: 大多数对象的生命周期都很短(“年轻代”对象很快就会变成垃圾),而存活时间较长的对象(“老年代”对象)则会存活更长时间。
-
Python 将对象分为三代(0代、1代、2代)。新创建的对象都属于 0 代。
-
垃圾回收器会更频繁地扫描年轻代(0代)。如果在一次 0 代扫描后对象仍然存活,它就会被提升到 1 代。类似地,在 1 代扫描后仍然存活的对象会被提升到 2 代。
-
触发条件: 分代回收不是实时进行的,而是根据一定的阈值(例如,某一代中分配的对象数量与释放的对象数量之差达到某个值)来触发。
-
工作方式: 当分代回收器运行时,它会专门查找并回收循环引用的对象集合。
-
gc 模块: Python 的 gc 模块允许开发者与垃圾回收器进行交互,例如手动触发回收 (gc.collect())、调整回收阈值、关闭或开启回收器等。
-
内存释放:
-
当对象的引用计数为零时,或者当分代回收器确定对象是垃圾时,Python 会调用该对象的 __del__ 方法(如果用户定义了)。
-
之后,Python 内存管理器会将这块内存归还给相应的分配器(例如,obmalloc 的内存池或直接还给操作系统)。
-
注意: __del__ 方法的执行时机并不完全确定,且如果在 __del__ 方法中产生异常,可能会导致一些问题。因此,通常不建议过度依赖 __del__ 方法进行关键资源的释放,而是使用 try...finally 语句或上下文管理器 (with 语句) 来确保资源的正确释放。
主要区别与总结
特性 | C++ | Python |
控制级别 | 手动/精细控制 | 自动管理 |
主要机制 | 静态、栈、堆分配;程序员负责堆内存的释放 | 私有堆、对象分配器、引用计数、分代垃圾回收 |
内存安全 | 风险较高(内存泄漏、悬空指针等),需谨慎处理 | 风险较低,由GC处理,但仍可能因循环引用(部分)或外部资源泄漏 |
灵活性 | 非常高,可实现各种自定义内存管理策略 | 较高,但主要在Python内存管理器的框架内 |
开发效率 | 较低,需要关注内存细节 | 较高,开发者可更专注于业务逻辑 |
性能开销 | 直接操作内存,潜在性能高;但管理不当开销大 | GC有一定开销,但obmalloc等优化了小对象分配 |
典型工具 | new/delete, malloc/free, 智能指针 | 自动GC, gc模块 |
总结:
-
C++ 提供了对内存的底层访问和完全控制,这使得它可以用于性能要求极高的系统级编程和资源受限的环境。但这种控制力也要求开发者具备更强的内存管理意识和技能,以避免常见的内存错误。现代C++通过智能指针等特性大大减轻了手动管理的负担。
-
Python 的设计哲学是牺牲部分性能以换取开发效率和易用性。其自动内存管理机制(尤其是垃圾回收)使开发者不必过多关注内存分配和释放的细节,从而可以更快地开发应用程序。然而,理解其内存模型对于编写高效的Python代码和排查潜在的内存问题仍然是有益的。
选择哪种语言或内存策略取决于具体的应用场景、性能需求、开发周期以及团队的熟悉程度。
相关文章:
C++ 与 Python 内存分配策略对比
内存管理是编程中的一个核心概念,它直接影响程序的性能、稳定性和资源利用率。C 和 Python 作为两种广泛使用的编程语言,在内存分配和管理方面采用了截然不同的策略。 C 内存分配策略 C 赋予程序员对内存的精细控制能力,同时也带来了更大的…...
TB开拓者策略交易信号闪烁根因及解决方法
TB开拓者策略信号闪烁分析 TB开拓者策略交易信号闪烁根因 TB开拓者策略交易信号闪烁根因分析 信号闪烁是交易策略开发中常见的问题,特别是在TB(TradeBlazer)开拓者等平台上。以下是信号闪烁的主要根因分析: 主要根因 未来函数问题 使用了包含未来信息…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(24):受身形 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)うけみけい 受身形(2)復習(ふくしゅう):3、单词(1)日语(2)日语片假名单词4、相近词练习5、单词辨析记录6、总结1、前言 (1)情况说明 自己在今…...
牛客网NC209794:使徒袭来
牛客网NC209794:使徒袭来 题目背景 问题分析 数学建模 设三位驾驶员的战斗力分别为 a, b, c已知条件:a b c n (n为输入的正整数)目标:求 a b c 的最小值 解题思路 根据算术-几何平均值不等式(AM-GM不等式),对于任意正实数a, b, c&a…...
命令行登录 MySQL 报 Segmentation fault 故障解决
问题描述:对 mysql8.0.35 源码进行 make,由于一开始因为yum源问题少安装依赖库 库,在链接时遇到错误 undefined reference to,后来安装了相关依赖库,再次 make 成功。于是将 mysqld 启动,再用 mysql -u roo…...
2025ICPC邀请赛南昌游记
滚榜时候队伍照片放的人家的闹麻了,手机举了半天 。 最后银牌700小几十罚时,rank60多点。 参赛体验还行,队长是福建人,说感觉这个热度是主场作战哈哈哈哈。空调制冷确实不太行吧。 9s过A是啥,没见过,虽然…...
kotlin flow的写法
以下是 Android 开发中 Kotlin Flow 的常见使用模式和操作符的完整中文总结: 1. 基本 Flow 创建方式 // 从多个值创建 val flow1 flowOf(1, 2, 3)// 使用 flow 构建器 val flow2 flow {emit(1)delay(100)emit(2) }// 从集合创建 val flow3 listOf(1, 2, 3).asFl…...
springboot+mybatis或mybatisplus在进行%name%的前后模糊查询时如何放防止sql注入
在使用 Spring Boot 配合 MyBatis 或 MyBatis-Plus 进行数据库操作时,确保防止 SQL 注入是非常重要的。对于 %name% 样式的前后模糊查询,以下是几种有效的方法来防止 SQL 注入: 1. 使用 MyBatis 的 <if> 标签和 #{} 占位符 MyBatis 默…...
基于51单片机教室红外计数灯光控制—可蓝牙控制
基于51单片机智能教室灯光 (仿真+程序+原理图+PCB+设计报告) 功能介绍 具体功能: 本系统由STC89C52单片机时钟芯片DS1302液晶屏LCD1602光敏电阻红外对管LED灯模块按键模块蓝牙模块构成 具体…...
HTTPS、SSL证书是啥?网站“安全小锁”的入门科普
你有没有发现,浏览网页时,有些网站地址栏前面会出现一个小锁的图标🔒,而有些网站却没有?这个小锁其实代表着网站用了“HTTPS”,是比普通“HTTP”更安全的协议。今天,我们就来聊聊HTTPS、SSL证书…...
大模型备案中的安全考量:筑牢数字时代的安全防线
在数字化浪潮席卷全球的当下,大模型技术凭借强大的数据分析、模式识别与语言理解生成能力,成为推动产业变革、提升社会运转效率的关键力量。从智能客服降本增效,到医疗影像精准诊断,再到金融风险智能预测,大模型正重塑…...
Linux句柄数过多问题排查
以下是Linux句柄数过多问题的排查与解决方法整理: 一、检测句柄使用情况 1.查看系统限制 单个进程限制:ulimit -n 系统级总限制:cat /proc/sys/fs/file-max 2.统计进程占用量 查看指定进程:lsof -p <PID> | wc -…...
Python训练第三十天
DAY 30 模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 总结:导入包的核心就是找到目录,只有理解了py…...
Java资源管理与防止泄漏:从SeaTunnel源码看资源释放
资源管理是 Java 开发中常被忽视却至关重要的一环。本文从 SeaTunnel 案例出发,探讨 Java 中如何正确管理资源,防止资源泄漏。 SeaTunnel 中的一次修复 Apache SeaTunnel 项目中的 HiveSink 组件曾存在一个典型的资源泄漏隐患。修复前后的代码对比如下…...
Notepad++ 学习(三)使用python插件编写脚本:实现跳转指定标签页(自主研发)
目录 一、先看成果二、安装Python Script插件三、配置Python脚本四、使用脚本跳转标签页方法一:通过菜单运行方法二:设置快捷键(推荐) 五、注意事项六、进阶使用 官网地址: https://notepad-plus-plus.org/Python Scri…...
PYTHON训练营DAY30
库的导入 一、导入整个 import 库 二、从库中导入特征项 from 库 import XXX 三、非标准导入:导入整个库 from 库 import * 四、导入自定义的库 (一)项目 创建一个打招呼的库 # greet.py def say_hello(name):return f"你好&a…...
Linux 文件(2)
文章目录 1. 文件描述符1.1 文件描述符是什么1.2 文件描述符如何分配 2 重定向2.1 输出重定向2.2 输入重定向2.3 使用dup2进行重定向 3. 文件、父子进程和进程替换 1. 文件描述符 1.1 文件描述符是什么 什么是文件描述符呢? 我们先来看之前所介绍的系统级别的文件…...
netcore项目使用winforms与blazor结合来开发如何按F12,可以调出chrome devtool工具辅助开发
就是像在开发网页那样,可以使用devtool工具辅助开发。可查看页面css,js等。我在网上看解决办法。没一个有用的。自己找了一个。不需要单独在页面写多余的代码 我的program.cs中有服务注册代码增加 3行代码。 #if DEBUGservices.AddBlazorWebViewDevelo…...
CSS attr() 函数详解
attr() 是 CSS 中的一个函数,用于获取 HTML 元素的属性值并在样式中使用。虽然功能强大,但它的应用有一些限制和注意事项。 基本语法 element::pseudo-element {property: attr(attribute-name); } 可用场景 1. 在伪元素的 content 属性中使用&#…...
人生如戏、戏如人生
今早,6:30起床给一家人弄早餐,然后听到了老公的一声大喊:”半小时了,你干什么了“,原来孩子说她在理书包,被老公骂了。 最近几天,老公脾气变得很差,孩子每天都会被老公骂…...
Java迭代器知识点详解
在 Java 编程中,迭代器(Iterator)是一种用于遍历集合(如 List、Set、Map 等)元素的接口。它提供了一种统一的方式来访问集合中的元素,而无需暴露集合的内部结构。以下是关于 Java 迭代器的详细知识点&#…...
免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷
近日,苏州自动驾驶巴士线路——阳澄数谷示范线正式上线,即日起向全民免费开放试乘体验! 在苏州工业园区地铁3号线倪浜•阳澄数谷站外,一辆辆黑、白配色的小巴正在道路上有条不紊地行驶。与普通公交不同的是,小巴造型奇…...
Kotlin 协程
第一个协程程序 协程是可暂停计算的一个实例。它在概念上类似于线程,因为它需要运行一个代码块,该代码块与其他代码并发运行。然而,协程并不绑定到任何特定的线程。它可以在一个线程中暂停执行,并在另一个线程中恢复执行。 协程…...
MySQL函数触发:函数处理与触发器自动化应用
引言 各位数据库爱好者们好!今天我们要探索MySQL中两个强大的自动化工具——函数和触发器 🚀。函数就像数据库中的"瑞士军刀",能帮你高效处理各种数据;而触发器则是数据库的"自动感应器",能在数据…...
数据可视化热图工具:Python实现CSV/XLS导入与EXE打包
在数据分析工作中,热图(Heatmap)是一种非常直观的可视化工具,能够清晰展示数据矩阵中的数值分布和相关性。本文将介绍如何使用Python构建一个支持CSV/XLS文件导入、热图生成并可打包为EXE的桌面应用程序。 核心功能设计 我们的热图工具将包含以下核心功能: 支持CSV和Excel…...
CUDA Stream的进阶用法:流水线并行的资源竞争解决方案
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 引言:多任务推理场景的挑战 GPU在AI推理服务器的典型负载特征(并行模…...
Eclipse Java 开发调优:如何让 Eclipse 运行更快?
Eclipse Java 开发调优:如何让 Eclipse 运行更快? 在 Java 开发领域,Eclipse 是一款被广泛使用的集成开发环境(IDE)。然而,随着项目的日益庞大和复杂,Eclipse 的运行速度可能会逐渐变慢&#x…...
大模型(1)——基本概念
文章目录 一、大模型的定义与概念二、大模型的原理与技术核心三、大模型的应用领域四、市面上常用的大模型1. 生成类模型(文本/代码/图像)2. 理解类模型(文本/语义)3. 多模态模型4. 国产大模型 五、总结与趋势 一、大模型的定义与…...
MYSQL故障排查和环境优化
一、MySQL故障排查 1. 单实例常见故障 (1)连接失败类问题 ERROR 2002 (HY000): Cant connect to MySQL server 原因:MySQL未启动或端口被防火墙拦截。 解决:启动MySQL服务(systemctl start mysqld)或开放…...
sts下载安装
windows下STS(Spring Tools Suite,自带spring插件的eclipse)的下载与安装_sts下载-CSDN博客Spring Boot安装与配置教程_spring boot安装配置-CSDN博客...
Baklib知识中台架构设计与智能服务实践
知识中台架构四库体系解析 现代企业知识管理系统的核心在于构建结构化知识资产池,Baklib通过独创的四库体系——知识库、流程库、案例库、模型库——实现知识资源的全生命周期管理。其中,知识库作为基础层,聚合文档、图谱等显性知识…...
TinyEngine 2.5版本正式发布:多选交互优化升级,页面预览支持热更新,性能持续跃升!
前言 TinyEngine低代码引擎使开发者能够定制低代码平台。它是低代码平台的底座,提供可视化搭建页面等基础能力,既可以通过线上搭配组合,也可以通过cli创建个人工程进行二次开发,实时定制出自己的低代码平台。适用于多场景的低代码…...
嵌入式系统:技术演进、应用领域发展趋势全面解析
嵌入式系统:技术演进、应用领域及发展趋势全面解析 一、引言 在当今数字化时代,嵌入式系统已悄然融入到我们生活的方方面面,从日常使用的智能手机、智能家电,到汽车中的各种控制系统,乃至工业生产中的自动化设备、航…...
软件工程-项目管理
进度管理 又叫时间管理,确定进度目标,在与质量、成本目标协调的基础上,实现工期目标 具体包括以下过程: 活动定义:确定完成各项交付成果需要展开的具体活动活动排序:活动之间的先后关系和逻辑关系活动资…...
计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(二)爆炸效果修改图元类型
1. 爆炸效果 这是几何着色器中的一个常见应用,我们使用几何着色器来模拟爆炸效果。 我们希望将每个三角形沿其表面法向量向外移动,则实际上是将组成环面的三角形向外“爆炸”。 我们只需取三个顶点的法向量,然后将其相加并求平均ÿ…...
需求频繁变更?AI 驱动的自动化解决方案实践
在软件开发的实际场景中,需求频繁变更已成为困扰开发团队的常见难题。每一次需求变动,都意味着代码的重新编写、调试与测试,不仅消耗大量时间和人力成本,还可能引发一系列连锁反应,影响项目进度与质量。而飞算 JavaAI …...
ffmpeg转码后的视频有横条纹和彩虹横条等乱彩问题
原因:ffmpeg安装的时,./configure 添加了–disable-asm参数,导致色彩异常。 **解决方法:**移除该参数–disable-asm。 注意:不加该参数可能提示no yasm或nasm等问题,解决该问题即可。大多是环境变量没有配置…...
QT6 源(111):阅读与注释菜单栏 QMenuBar,进行属性与成员函数测试,信号与槽函数测试,并给出源码
(1) (2) (3) (4) (5) (6) (7)以下源代码来自于头文件 qmenubar . h : #ifndef QMENUBAR_H #defi…...
达梦数据库对json字段进行操作
在达梦数据库中,字段类型不能显式定义为JSON,通常以VARCHAR或TEXT类型存储JSON字符串,可以通过内置的JSON函数对JSON格式数据进行操作和条件过滤。 1. 创建表并插入JSON数据 假设字段类型为VARCHAR,存储JSON字符串: -…...
基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,相机分类,二手相机 开题报告内容 基于FlaskVue框架的东莞市二手相机交易管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着数字技术的迅猛发展和摄影文化的广泛普及,相机已成为人们记录生活、表达创意的重要工…...
谷歌 NotebookLM 即将推出 Sparks 视频概览:Gemini 与 Deep Research 加持,可生成 1 - 3 分钟 AI 视频
近期,谷歌旗下的 NotebookLM 即将推出一项令人瞩目的新功能 ——Sparks 视频概览。这一功能借助 Gemini 与 Deep Research 的强大能力,能够生成 1 - 3 分钟的 AI 视频,为用户带来全新的内容创作与信息获取体验。 NotebookLM:AI 笔…...
MCP详解
前言:AI能力跃迁的“最后一公里” 当前,大语言模型(LLMs)已展现出文本生成、逻辑推理等通用能力,但其与真实世界的交互仍存在瓶颈。传统模式下,开发者需为每个外部工具(如数据库、API、文件系统)编写定制化接口,导致开发周期长、兼容性差、安全风险高。而模型上下…...
信息学奥赛一本通 1539:简单题 | 洛谷 P5057 [CQOI2006] 简单题
【题目链接】 ybt 1539:简单题 洛谷 P5057 [CQOI2006] 简单题 【题目考点】 1. 树状数组 模板题及讲解:洛谷 P3374 【模板】树状数组 【解题思路】 解法1:树状数组 该有01构成数组初值都为0。 某位置的元素被修改奇数次后值为1&#x…...
设计模式-面试题
摘要: 1、通俗易懂,适合小白 2、仅做面试复习用,部分来源网络,博文免费,知识无价,侵权请联系! 1. 什么是设计模式? 设计模式是在软件开发过程中,针对反复出现的问题所…...
upload-labs靶场通关详解:第11关
一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array("php","php5","php4","php3","php2","html","htm","phtml"…...
excel:时间戳格式与日期格式的互转
13位时间戳转日期时间(毫秒) 假设A2单元格内容为13位的时间戳,再选中B2单元格,在公式框中输入 TEXT((A2/10008*3600)/8640070*36519,"yyyy/mm/dd hh:mm:ss.000")接下来,选中B2单元格,下拉应用公…...
嵌套式向量中断控制器(NVIC)
1.概述 2. NVIC 的中断处理机制 3. NVIC 中断管理机制 1.概述 中断控制器是ARMv7-M 异常模型的核心组成部分。该中断控制器的运行遵循 ARM 通用中断控制器(GIC)规范,该规范也适用于其他 ARMv7 架构配置和其他处理器架构。 ARMv7-M 的 NVIC(嵌套向量中断控制器)架构支持最…...
2025.05.19【Barplot】柱状图的多样性绘制
Custom color A few examples showing how to custom barplot color. Horizontal barchart It makes sense to make your barchart horizontal: group labels are now much easier to read 文章目录 Custom colorHorizontal barchart 探索Barplot的奥秘Barplot基础什么是Barp…...
MongoDB的管道聚合
管道聚合可以实现很多数据处理和统计功能,并且随着不断的更新,其功能也越来越丰富。代表着NoSQL数据库的一种发展趋势。 管道聚合通过aggregate语句实现,支持多种匹配、处理、输出方式。 其语法是: db.<collection>.aggr…...
基于 STM32 的自动温度巡检小车控制系统设计与实现
一、引言 在工业监控、仓储管理及环境监测等场景中,自动温度巡检系统具有重要应用价值。本文设计一种基于 STM32 单片机的自动温度巡检小车,通过集成温度采集、路径规划及数据处理功能,实现对目标区域的实时温度监测与异常报警,为智能化环境监控提供低成本解决方案。 二、…...