内存管理

-Marks-2 天前
开发语言·c++·vector·内存管理·迭代器失效·vector底层模拟实现
【C++编程】STL容器(二)--- vector底层模拟实现(常用接口实现 | 扩容机制 | 深浅拷贝 | 迭代器失效)目录前言一、vector 的成员变量1.1 vector 是什么1.2 _start、_finish、_endofstorage 三个指针成员
无名猿4 天前
c++·性能优化·内存管理·现代c++·语法基础
移动构造与移动赋值:把资源偷过来「std::move 是什么」那一篇已经讲清楚了:它只是个类型转换,真正搬数据的是移动构造函数。这一篇换个视角,从类的实现者出发,亲手写出正确、高效的移动操作。有几个问题只有写实现时才碰得到:noexcept 为什么不是装饰、移动后源对象到底处于什么状态、移动赋值怎么处理自赋值。还有一个更隐蔽的:编译器可能压根没给你生成移动操作。
无名猿5 天前
c++·内存管理·并发编程·现代c++
shared_ptr 的线程安全边界:计数安全不等于对象安全std::shared_ptr 大概是 C++ 里被误解最多的类型。很多人听说「它的引用计数是线程安全的」,就放心地把它当全局变量、在线程之间随手赋值,然后在大压力下偶发崩溃或者计数错乱。
无名猿5 天前
c++·性能优化·内存管理·标准库·现代c++
unique_ptr 完全指南:独占所有权与零开销裸指针最大的麻烦其实不是「会忘写 delete」,而是所有权含糊不清:这段内存归谁,谁来释放,读代码的人只能猜。std::unique_ptr 把答案钉死在类型里,同一时刻只有一个 unique_ptr 拥有这块内存,要转移就必须显式写 std::move。代价几乎为零,既不比裸指针多占内存,也不比它多花时间。下面把常用接口和几个容易踩的点一起讲清。
无名猿5 天前
c++·内存管理·调试技巧·现代c++
对象构造与析构顺序全解:声明顺序、继承链与逆序析构「对象是怎么被拼出来、又怎么被拆掉的」是 C++ 里最容易想错的一件事,偏偏它贯穿所有资源管理。一个常见的坑:你在初始化列表里把成员 b 写在 a 前面,就以为 b 先构造。其实不是,先后只认声明顺序。再比如通过基类指针 delete 一个派生对象,若基类析构不是 virtual,派生部分的析构函数压根不会被调用。这篇把这几条顺序规则一条条用实跑代码钉死,配上时序图,半年后翻回来照着图就能复现。
无名猿5 天前
c++·内存管理·现代c++·踩坑记录
拷贝构造与拷贝赋值:调用时机、深浅拷贝与复制消除「为什么我这行 T b = a; 调用的是拷贝构造,而 b = a; 却是拷贝赋值?」「为什么函数按值返回明明该拷贝两次,实测却只构造了一次?」拷贝语义是 C++ 里最容易「想当然」、却处处是坑的一块。这篇不堆定义,直接上打印计数器:把拷贝构造的触发时机、深浅拷贝的后患、以及编译器悄悄做的「复制消除(copy elision)」优化,用实跑输出一条条亮出来。
无名猿5 天前
c++·内存管理·现代c++·语法基础
裸指针还能不能用:不拥有与拥有的边界「裸指针还能不能用?」网上一边倒的答案是「别用,全换成 std::unique_ptr」。这话对,但只对了一半。C++ Core Guidelines 的真正立场更精细:裸指针(a T*)本身没有错,错的是用它去表达「所有权」。指针可以放心地当「观察者」用,只要你约定它不负责释放。这篇把「不拥有」和「拥有」的边界划清楚,并给你能直接套用的签名写法。
无名猿5 天前
c++·内存管理·现代c++·语法基础
左值、右值、纯右值、将亡值:值类别入门你有没有写过 std::move(x) 之后发现它还能被读取,或者重载了 f(T&) 和 f(T&&) 却搞不清到底调了哪个?这些怪现象的根都在「值类别(value category)」上。C++11 起给每个表达式贴了一张隐形标签,它直接决定一个表达式能不能取地址、能不能被移动、以及重载决议时该选哪个版本。这篇把五个概念一次讲清,并用真跑出来的输出告诉你每种实参选中了哪个函数。
无名猿6 天前
c++·内存管理·标准库·语法基础
指针算术与数组退化:数组名到底是不是指针「数组名就是指针」是 C/C++ 初学者最早听到的半句真理。说它是半句,是因为前半句在多数场合成立,后半句就会咬人:数组名在大多数表达式里会退化(decay)成指向首元素的指针,但数组类型本身和指针类型不是一回事。sizeof(arr) 拿到的是整块数组的字节数,&arr 的类型是「指向含 N 个 int 的数组的指针」。下面用编译器和 static_assert 把这件事钉死,顺便解释为什么函数参数里 int arr[10] 其实等价于 int*。
无名猿6 天前
c++·性能优化·stl·内存管理·标准库
list 与 forward_list:链表真的比 vector 快吗「中间插入删除用链表,随机访问用数组」这条规则背了很多年,但它只说对了一半。真把十万个 int 分别塞进 std::list 和 std::vector,链表的内存占用是后者的 6 倍,顺序遍历还要慢一个数量级。原因不在复杂度(两者遍历都是 O(n)),而在每个节点的额外指针和缓存局部性(cache locality)。这篇用实测把链表的开销算清楚,也把链表真正不可替代的两个场景——迭代器失效规则与 splice 零拷贝——讲透,最后给一条能直接用的选型结论。
无名猿7 天前
c++·性能优化·内存管理·标准库·现代c++
shared_ptr 完全指南:引用计数、控制块与开销std::unique_ptr 把「独占所有权」钉死在类型上,但现实里经常需要多个对象同时引用同一份资源:缓存、父子节点、观察者列表……这时 std::shared_ptr(共享所有权指针,shared pointer)登场。它用引用计数(reference count)记录「现在有几个人在用」,最后一个离开时才释放。这篇把控制块里到底存了什么、它比裸指针贵在哪、以及什么时候不该用它一次讲清。
凉茶钱10 天前
c语言·开发语言·c++·内存管理·动态内存
【C++】动态内存管理完整解析:从内存划分到 new delete 底层原理目录内存管理的划分C语言中动态内存管理的方式C++内存管理方式new/delete操作内置类型new/delete操作自定义类型
无名猿10 天前
c++·内存管理·现代c++·踩坑记录
new/delete 与 malloc/free:为什么绝对不能混用很多 C++ 新手把 new/delete 当成「C++ 版的 malloc/free」来用,结果在析构不执行、资源泄漏、甚至程序崩溃里打转。本质区别在于:new 不只是申请内存,它还调用构造函数;delete 不只是释放内存,它还调用析构函数。而 malloc/free 只认字节、不认对象。一旦把两边混着用,等于让「管生命周期的」和「只管内存的」两套机制互相越权——后果是未定义行为(undefined behavior)。本文用实跑代码把这条红线画清楚。
无名猿11 天前
c++·内存管理·现代c++·语法基础
对象存储期全解:automatic / static / dynamic / thread「这个变量什么时候被销毁?」答案不取决于它在哪一行写的,而取决于它的存储期(storage duration)。C++ 里有四种存储期:自动(automatic)、静态(static)、动态(dynamic)、线程(thread_local)。它们常和作用域(scope)被混为一谈——但作用域只决定「名字在哪段代码里看得见」,存储期才决定「对象活到什么时候」。本文用构造/析构的真实输出把四种存储期钉死。
桃蹊、1 个月前
freertos·内存管理·栈·堆
FreeRTOS(二)之堆和栈:内存基础入门学 FreeRTOS 第一道坎不是任务,是搞懂内存。堆和栈分不清,后面任务栈大小、内存管理全都会懵。目录
mounter6251 个月前
linux·内存管理·linux kernel·kernel·liveupdate
重构 Kexec Handover:Linux 内核如何将 KHO 打造为无状态、可重入的跨重启交接基石在云计算与超大规模数据中心中,内核升级通常意味着整机重启与服务中断。为了实现“零感知”升级,Linux 内核社区近年来相继引入了 KHO (Kexec HandOver,Kexec 内存与状态交接机制) 以及基于其构建的 LUO (Live Update Orchestrator,内核实时更新编排器) 技术。它们允许在新旧内核通过 kexec 切换时,将关键的内存页面、设备树信息乃至运行中的 VM/容器状态原封不动地交接给新内核。
捷瑞电子工坊2 个月前
freertos·内存管理·嵌入式开发·内存碎片·嵌入式实时操作系统·动态内存分配
FreeRTOS 内存管理详解:从 heap_1 到 heap_5 的选择与实践在嵌入式实时系统中,内存管理是一个至关重要的环节。FreeRTOS 作为一款轻量级实时操作系统,提供了多种内存管理方案,以适应不同的应用场景。本文将通俗易懂地介绍 FreeRTOS 的内存管理机制,包括五种标准实现(heap_1 至 heap_5)的原理、区别及使用方法,并给出完整代码示例,帮助读者快速上手。
gumichef2 个月前
c++·内存管理
第二章:C/C++内存管理答案:C C C A A A A A D A B解析:1. globalVar —— C 数据段(已初始化全局变量)
不动明王19843 个月前
内存管理·计算引擎·presto·revoking·memorypool
Presto 查询引擎内核详解:集群资源管理机制解析本文档详细阐述Presto集群中Coordinator和Worker两个核心角色如何协同完成资源管理(重点是内存),以确保查询高效、稳定地执行。
想你依然心痛3 个月前
内存管理·线程安全·异步任务·napi·harmonyos 7.0·c++桥接·性能加速
【共创季稿事节】HarmonyOS 7.0 NAPI 实战:C/C++ 原生模块开发与性能加速在最不期待的时候,反而一切都会变得顺利。 期待往往伴随紧张和控制欲,反而制造阻力;当你真正放下、不执著结果时,能量是松弛的、开放的,事情反而容易自然匹配。顺利不是求来的,是不求之后到来的。