侯捷 C++ 课程学习笔记:C++内存管理机制

news2025/3/11 9:13:00

内存管理从平地到万丈高楼

内存管理入门(Memory Management 101)

需要具有动态分配并使用memory(存储(器),(计算机的)内存),使用过C++标准库的容器(containers)。

需要利用到的工具: Dev-C++ 5.11,with GUN 4.9.2(版本无所谓),Visual C++ 6.0

 网络有许多资源:Doug Lea’s Home Page(gee.cs.oswego.edu)

Doug Lea 自1986年起潜心研究malloc(内存分配器)算法,其作品被称为DL Malloc。目前Linux 的glibc 中的malloc 算法就是直接来自Doug Lea,其他平台的malloc 实现也或多或少受到DL 的影响,DL Malloc 源码可下载自Doug Lea 个人主页:Doug Lea's Workstation,内存分配器。

Bibliography (参考书目) :STL 源码剖析(作者:侯捷,Chap 2:allocator),Small Memory Software(作者:James Noble & Charles Weir,AW 2001),Modern C++ Design(作者:Andrei Alexadrescu,Chap 4:Small-Object Allocation,主要介绍loki)。

Libraries:STL Allocators,MFC CPlex+CFixedAlloc,Boost.Pool,Loki SmallObjAllocator,VC malloc/free,jemalloc,tcmalloc ┅。

Test-Mem.cpp 中有课程提到和所用的所有代码

primitives:原语;基本类型(在编程语境中,“primitives”常指基本数据类型,如整数、浮点数、布尔值等;也可表示基本操作或基本构件 )

malloc/free:“malloc”(动态内存分配函数,意为“内存分配” 内存分配器)/“free”(内存释放函数,意为“释放” )

std::allocator:标准分配器(“std”是 C++ 标准库命名空间 “standard” 的缩写,“allocator” 表示分配器,在 C++ 中用于管理内存分配和释放的机制 )

other allocators:其他分配器

loki::allocator:“Loki”(一种 C++ 库的名称 )::分配器

天宝当年,DOS 640K,and extented memory(以及扩展内存)。

内存分配的每一层面

C++ 应用程序

C++ Applications:绝大多数程序员所在层次,                                                                                 

C++ Library(std::allocator):最高阶使用C++标准库                                                                     

C++ primitives(new,new〔〕,new(),::operator new(),...)new〔〕:创建数组,基本工具   

CRT(malloc/free)最终到达的层面                                                                                       

O.S.API(such as HeapAlloc,VirtualAlloc,...)操作系统提供的内存的系统调用。太低阶,需要跟某一个操作系统绑死。这个就绕过了 malloc。 

四个层面的基本用法

C++ memory primitives

分配释放类别可否重载
malloc()free()C函数不可
newdeleteC++表达式(expressions)不可
::operator new()::operator delete()C++函数
allocator<T>::allocate()allocator<T>::deallocateC++标准库可自由设计并以之搭配任何容器

注:有不当之处,请批评指正!谢谢~

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

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

相关文章

JVM常用概念之本地内存跟踪

问题 Java应用启动或者运行过程中报“内存不足&#xff01;”&#xff0c;我们该怎么办? 基础知识 对于一个在本地机器运行的JVM应用而言&#xff0c;需要足够的内存来存储机器代码、堆元数据、类元数据、内存分析等数据结构&#xff0c;来保证JVM应用的成功启动以及未来平…

【鸿蒙开发】Hi3861学习笔记- 软件定时器示例

00. 目录 文章目录 00. 目录01. 定时器概述02. 定时器API03. 定时器常用API3.1 osTimerNew3.2 osTimerDelete3.3 osTimerStart3.4 osTimerStop 04. 程序示例05. 附录 01. 定时器概述 软件定时器&#xff0c;是基于系统Tick时钟中断且由软件来模拟的定时器&#xff0c;当经过设…

在Html5中仿Matlab自定义色带生成实践

目录 前言 一、RGB的相关知识 1、RGB的基本原理 2、RGB的数值表示 3、应用场景 二、ColorMap生成实战 1、外部库介绍 2、相关API 3、实例生成 三、总结 前言 在现代网页开发与数据可视化领域&#xff0c;色彩的表现力对于信息传达和视觉体验起着至关重要的作用。色带&…

贪心算法--

1.柠檬水找零 link:860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; code class Solution { public:bool lemonadeChange(vector<int>& bills) {// 贪心算法&#xff0c; 优先花出大面额bill&#xff0c; 尽可能保护小面额billint five 0, ten 0;// 不…

如何选择国产串口屏?

目录 1、迪文 2、淘晶驰 3、广州大彩 4、金玺智控 5、欣瑞达 6、富莱新 7、冠显 8、有彩 串口屏&#xff0c;顾名思义&#xff0c;就是通过串口通信接口&#xff08;如RS232、RS485、TTL UART等&#xff09;与主控设备进行通信的显示屏。其核心功能是显示信息和接收输入…

matlab慕课学习3.1

3.1顺序结构程序 于20250306 3.1.1程序和程序设计 程序是用某种计算机能够理解并且能够执行的语言来描述的解决问题的方法和步骤。 3.1.2程序的三种基本结构 1.顺序结构 2.选择结构 3.循环结构 3.1.3脚本文件和函数文件 脚本文件是可在命令行窗口直接执行的文件&#xff0…

cesium地图设置3d,2d,2.5d动态切换

通过修改cesium实例vw的scene的显示模式&#xff0c;来切换最终的显示模式。 Cesium.SceneMode总共有四个变量值&#xff0c;分别如下&#xff1a;NameTypeDescriptionMORPHINGnumber在3d与2d之间切换变体 between mode, e.g., 3D to 2D.COLUMBUS_VIEWnumber2.5d模式&#xff0…

【数据结构】二叉搜索树、平衡搜索树、红黑树

二叉搜索树&#xff08;Binary Search Tree&#xff09; 二叉搜索树是一种特殊的二叉树&#xff0c;它用来快速搜索某个值&#xff0c;对于每个节点都应该满足以下条件&#xff1a; 若该节点有左子树&#xff0c;那么左子树中所有节点的值都应该小于该节点的值。若该节点有右…

密码学(终极版)

加密 & 解密 备注&#xff1a;密码学领域不存在完全不能破解的密码&#xff0c;但是如果一个密码需要很久很久&#xff0c;例如一万年才能破解&#xff0c;就认为这个密码是安全的了。 对称加密 非对称加密 公钥加密、私钥解密 私钥签名、公钥认证 非对称的底层原理是…

经销商管理系统选型解析:8款产品详评

本文主要介绍了以下8款经销商管理系统&#xff1a;1.纷享销客&#xff1b; 2.用友T6经销商管理系统&#xff1b; 3.金蝶经销商管理系统&#xff1b; 4.鼎捷经销商管理系统&#xff1b; 5.浪潮经销商管理系统&#xff1b; 6.销售易&#xff1b; 7.SAP Business One Distributor …

【C++】函数重载与nullptr

1、函数重载 C支持在同一个作用域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是形参个数不同或者类型不同。这样C函数调用就表现出了多态行为&#xff0c;使用更灵活。C语言是不支持同一作用域中出现同名函数的。 代码&#xff1a; 形参类型不…

处理动态分页:自动翻页与增量数据抓取策略-数据议事厅

一、案例场景 Lily&#xff08;挥舞着数据报表&#xff09;&#xff1a;“用户反馈我们的股票舆情分析总是缺失最新跟帖&#xff01;这些动态分页像狡猾的狐狸&#xff0c;每次抓取都漏掉关键数据&#xff01;” 小王&#xff08;调试着爬虫代码&#xff09;&#xff1a;“传…

用android studio模拟器,模拟安卓手机访问网页,使用Chrome 开发者工具查看控制台信息

web 网页项目在安卓手机打开时出现问题&#xff0c;想要查看控制台调试信息。记录一下使用android studio 模拟器访问的方式。 步骤如下&#xff1a; 1.安装android studio&#xff0c;新增虚拟设备&#xff08;VDM- virtual device manager) 点击Virtual Device Manager后会…

【Linux内核系列】:深入理解缓冲区

&#x1f525; 本文专栏&#xff1a;Linux &#x1f338;作者主页&#xff1a;努力努力再努力wz ★★★ 本文前置知识&#xff1a; 文件系统以及相关系统调用接口 输入以及输出重定向 那么在此前的学习中&#xff0c;我们了解了文件的概念以及相关的系统调用接口&#xff0c;并…

【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

【微知】如何根据内核模块ko查看所依赖其他哪些模块?(modinfo rdma_ucm |grep depends)

背景 有些情况下查看某个模块被哪些模块依赖可以用lsmod看到后面的列表&#xff0c;但是反向查看就要麻烦一些&#xff0c;比如某个模块依赖哪些其他模块&#xff1f;通过modinfo xxx.ko获取里面的depends相关信息 方法 modinfo rdma_ucm |grep depends实操 实操前先看依赖…

Linux安装ComfyUI

Linux安装ComfyUI 1. ComfyUI2. 放置模型文件3. 创建python虚拟环境3.1 删除 Conda 虚拟环境 4. python虚拟环境&#xff0c;安装PyTorch5. 安装依赖6. 运行7. 打开8. 下载模型 移动到路径 1. ComfyUI # cat /etc/issue Ubuntu 20.04.6 LTS \n \lmkdir comfyUI cd comfyUI/git…

订阅指南:用关键指标驱动业务增长

分析订阅业务远非看似简单。仅仅增加订阅数可能并不比维持一批忠实用户更有利可图。深入分析订阅数据及其背后的运作机制&#xff0c;将帮助您优化产品决策、预测收入并促进增长。本文将为您解读关键订阅指标的实际意义&#xff0c;并展示如何通过订阅宝这一专业工具&#xff0…

【开发学习】如何使用deepseek创建记录事件时间的PC应用程序

本文记录了尝试使用deepseek创建应用程序的过程&#xff0c;实现记录事件&时间的PC应用程序&#xff0c;包括创建代码、测试及调整。 目的&#xff1a;创建一个应用&#xff0c;用户输入文本提交&#xff0c;应用记录下时间和文本&#xff0c;数据留存在excel和应用程序中。…

OSPF-单区域的配置

一、单区域概念&#xff1a; 单区域OSPF中&#xff0c;整个网络被视为一个区域&#xff0c;区域ID通常为0&#xff08;骨干区域&#xff09;。所有的路由器都在这个区域内交换链路状态信息。 补充知识点&#xff1a; OSPF为何需要loopback接口&#xff1a; 1.Loopback接口的…