C++内存管理
C++ 内存管理 · 第一讲 primitives本讲围绕 C++ 内存管理的「基础构件 primitives」展开,核心结论: C++ 中有多种内存分配/释放方式,其中 new/delete 最终依赖 operator new/operator delete,而后者通常依赖 malloc/free。 new 不只是分配内存,还会调用构造函数;delete 不只是释放内存,还会调用析构函数。 数组分配必须使用 new[] / delete[],否则可能导致资源泄漏。 可以通过重载类内 operator new/delete 实现专属内存池,减少 malloc 调用次数和 cookie 开销。 将内存池逻辑抽取为通用 allocator,是向标准库分配器演进的关键一步。 =default 用于请求编译器生成默认版本,=delete 用于禁止某个函数;但 operator new/delete 没有可默认生成的版本。 一、四种内存分配和释放方法 在编程时可以通过上图的几种方法直接或间接地操作内存。下面将介绍四种 C++ 内存操作方法: 通常可以使用 mal...
oki_allocator
C++ 内存管理 · 第四讲 Loki allocator 来源:xubenshan.github.io — 第四讲 Loki allocator作者:小熊 | 2026/7/19 本讲剖析 Loki 库中 SmallObjAllocator 的三个 class 嵌套结构(chunk → FixedAllocator → SmallObjAllocator),并讨论其实现中的一个小 bug 及修复方法。 三个 class 结构嵌套的数据结构设计:最底层是 chunk,chunk 有三个成员,firstAvailableblock 代表下次可以用的第一个区块索引;blocks available 代表可用区块的数量。依次往上,最高层是 smallobjallocator。用户看到的是 smallobjallocator。 chunk 类中有一些函数:重点来看 reset 中有一个流水号索引设置。i 的类型是 unsigned int,代表一个字节大小的无符号整数。用 int 的话,4 个字节,会增加开销。空闲 block 第一个字节用于保存下一个 bloc...
other_allocator
C++ 内存管理 · 第五讲 other allocator 来源:xubenshan.github.io — 第五讲 other allocator作者:小熊 | 2026/7/19 本讲介绍 GNU C++ 中除 std::allocator 之外的其它分配器:array_allocator、malloc_allocator、debug_allocator、pool_allocator、bitmap_allocator 等,重点是 bitmap_allocator。 一般我们会把分配器用于容器中,不会自己手动使用分配器分配内存。比如: 123std::allocator<std::string> alloc;std::string* p = alloc.allocate(3); //分配3个string大小的内存alloc.deallocate(p, 3);//释放内存 用户在释放内存的时候需要手动输入释放的内存大小,这样很麻烦,用户需要牢记自己当初申请了多大的内存。 而使用容器,不需要手动调用 allocate 和 deallcoate...
malloc_free
C++ 内存管理 · 第三讲 malloc/free(VC6 内存分配) 来源:xubenshan.github.io — 第三讲 malloc/free作者:小熊 | 2026/7/19 本讲通过分析 VC6 在调用 main() 之前的初始化行为,来剖析 VC6 的内存管理机制,重点是 SBH(Small Block Heap,小区块堆)对小内存块的「分段管理」。 VC6 内存分配通过 VC6 调用 main 函数之前的初始化行为来分析 VC6 的内存管理。 下图是函数调用栈,在调用 main 函数之前还会调用很多函数。重点看 _heap_alloc_base 函数,这个函数内部判断了 size 的大小,当 size 小于 1016 的时候调用 _sbh_alloc_block 函数。大于时调用 windows 操作系统提供的 HeapAlloc 函数。也就是说 VC6 和第二章的分配器一样,都是为小区块服务的。大区块就直接交给操作系统进行处理。 在 vc10 底下,仍然有 _heap_alloc_base 函数,但函数内部不管...
基础篇
基础篇(P1-P12) 课程:使用C++在虚幻引擎中制作游戏(Tom Looman / ActionRoguelike)来源:BV1csHvzzE41 P1 1 - Welcome! (Course Structure)时长 3:07 | B站 P2 2 - GitHub Repository and Blank C++ Project时长 9:01 | B站 P3 3 - Project Walkthrough and first C++ Class UNREAL ENGINE 5.0EDITOR BASICS _ Tom时长 13:22 | B站 P4 4 - Adding Components (Third-person Camera)时长 10:55 | B站 P5 5 - Binding Movement Input时长 8:12 | B站 P6 6 - Character Setup & Course Content (GitHub Commit Example)时长 4:46 | B站 P7 7 - Character I...
AI篇
AI篇(P39-P51) 课程:使用C++在虚幻引擎中制作游戏(Tom Looman / ActionRoguelike)来源:BV1csHvzzE41 P39 39 - AI Overview (Behavior Trees, Blackboards, EQS)时长 5:09 | B站 P40 40 - Bot Behaviors and Movement时长 23:41 | B站 P41 41 - Custom Check Attack Range Service for BT时长 26:33 | B站 P42 42 - Custom C++ BT Task for Ranged Attacks时长 17:37 | B站 P43 43 - Environment Queries for smarter movement时长 19:07 | B站 P44 44 - Adding Sight with Pawn Sensing Component时长 12:34 | B站 P45 45 - Improving Bot Animations &a...
打磨优化
打磨优化(P94-P114) 课程:使用C++在虚幻引擎中制作游戏(Tom Looman / ActionRoguelike)来源:BV1csHvzzE41 P94 93 - Creating Main Menus with UMG时长 32:07 | B站 P95 94 - Creating In-Game Menus时长 12:22 | B站 P96 95 - Setup Widgets & Event-based logic for Buffs & Debuffs时长 18:32 | B站 P97 96 - Finishing Buff Bar & Animated materials for UI时长 15:14 | B站 P98 97 - Syncing ActionEffect (Duration) for Multiplayer时长 7:31 | B站 P99 98 - Widget Styling (HUD & Menus)时长 14:49 | B站 P100 99 - Animation Sta...
std_allocator
C++ 内存管理 · 第二讲 std::allocator 来源:xubenshan.github.io — 第二讲 std::allocator作者:小熊 | 2026/7/19 本讲核心: 各编译器(VC6 / BC5 / GCC)自带的 allocator 本质上都是对 malloc/free 的简单封装,分配出的内存带有 cookie。 想要去除 cookie,前提是「内存块大小一致」;大小不一就必须用 cookie 记录区块大小。 GCC 2.9 真正使用的是 std::alloc(二级分配器),它用 16 条链表 + 战备池(pool)管理 8~128 字节的小块,从而省掉 cookie。 std::alloc 分两级:第二级(__default_alloc_template)处理 ≤128 字节的小块,第一级(__malloc_alloc_template)用 malloc/free 处理大块。 一、malloc() 内部原理1、VC6.0 malloc 从上图可见,VC6 中的 malloc() 函数分配的内存里面除...
游戏系统
游戏系统(P52-P72) 课程:使用C++在虚幻引擎中制作游戏(Tom Looman / ActionRoguelike)来源:BV1csHvzzE41 P52 52 - Helpful utilities for game framework (static functions)时长 8:52 | B站 P53 53 - Improving bot firing logic (weapon accuracy, collision checks)时长 12:07 | B站 P54 54 - Damage feedback through Hitflash effect时长 4:45 | B站 P55 55 - 3D (Projected) Health bar with C++时长 30:11 | B站 P56 56 - Updating HUD Widgets (Health, Credits, GameTime) UMG Learning Resources _时长 15:15 | B站 P57 57 - Setup Proper Play...
网络同步
网络同步(P73-P93) 课程:使用C++在虚幻引擎中制作游戏(Tom Looman / ActionRoguelike)来源:BV1csHvzzE41 P73 75 - What is Network Replication时长 15:21 | B站 P74 76 - Networking the world interaction logic (RPCs)时长 24:49 | B站 P75 77 - Networking the Treasure Chest (RepNotify)时长 13:30 | B站 P76 78 - Assignment 6 Solution Review时长 13:07 | B站 P77 78 - Authority and Actor instances on Clients时长 9:00 | B站 P78 79 - Assignment 7 (Replicating Attributes & Power-ups)时长 3:17 | B站 P79 79 - Networking the Attribu...