<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>内存管理 on PlumePHP</title><link>https://plumephp.com/tags/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/</link><description>Recent content in 内存管理 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Sat, 15 Aug 2026 14:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/tags/%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml"/><item><title>10. 内存管理</title><link>https://plumephp.com/cs-memory-management/</link><pubDate>Wed, 05 Aug 2026 00:00:00 +0000</pubDate><guid>https://plumephp.com/cs-memory-management/</guid><description>&lt;h2 id="1-内存管理的发展历程"&gt;1. 内存管理的发展历程&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;无内存管理（单道程序） → 静态分区 → 动态分区 → 
分页 → 分段 → 段页式 → 虚拟内存
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="2-连续分配方式"&gt;2. 连续分配方式&lt;/h2&gt;
&lt;h3 id="21-固定分区-vs-动态分区"&gt;2.1 固定分区 vs 动态分区&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方式&lt;/th&gt;
					&lt;th&gt;原理&lt;/th&gt;
					&lt;th&gt;问题&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;固定分区&lt;/td&gt;
					&lt;td&gt;内存分成等大/不等大的固定区域&lt;/td&gt;
					&lt;td&gt;内部碎片，利用率低&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;动态分区&lt;/td&gt;
					&lt;td&gt;按需求分配连续内存块&lt;/td&gt;
					&lt;td&gt;外部碎片，需紧凑整理&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-动态分区的分配算法"&gt;2.2 动态分区的分配算法&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;首次适应（First Fit）：从头找第一个足够大的空闲块
 优点：速度快
 缺点：低地址碎片多

最佳适应（Best Fit）：找最小的足够大的空闲块
 优点：减少浪费
 缺点：产生大量小碎片

最坏适应（Worst Fit）：找最大的空闲块
 优点：碎片较大可利用
 缺点：大进程无法分配

下次适应（Next Fit）：从上次分配位置继续搜索
 优点：分布更均匀
 缺点：尾部碎片可能累积
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="3-分页paging"&gt;3. 分页（Paging）&lt;/h2&gt;
&lt;h3 id="31-基本思想"&gt;3.1 基本思想&lt;/h3&gt;
&lt;p&gt;将物理内存和逻辑内存划分为&lt;strong&gt;固定大小的页框（Page Frame）&lt;strong&gt;和&lt;/strong&gt;页面（Page）&lt;/strong&gt;，大小通常为 4KB。&lt;/p&gt;</description></item><item><title>Redis 内存管理深度解析：分配器、碎片治理与驱逐策略</title><link>https://plumephp.com/redis-memory-management/</link><pubDate>Sat, 15 Aug 2026 14:00:00 +0800</pubDate><guid>https://plumephp.com/redis-memory-management/</guid><description>&lt;p&gt;Redis 作为纯内存数据库，内存不仅是数据存储介质，更是决定服务可用性的核心资源。一个 64GB 内存的 Redis 节点，可能实际存储的有效数据不足 40GB，剩余空间被内部分配器开销、数据结构元数据、内存碎片以及过期键残留所吞噬。理解 Redis 内存管理的底层机制，是在生产环境中避免 OOM、控制成本、提升容量的必修课。&lt;/p&gt;</description></item><item><title>Python 内存管理、垃圾回收与性能调优：写出内存友好的 Python 代码</title><link>https://plumephp.com/python-memory-gc-performance/</link><pubDate>Thu, 13 Aug 2026 12:00:00 +0800</pubDate><guid>https://plumephp.com/python-memory-gc-performance/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Python 的内存管理是自动的，但&amp;quot;自动&amp;quot;不等于&amp;quot;高效&amp;quot;。理解引用计数和垃圾回收机制，学会使用 &lt;code&gt;__slots__&lt;/code&gt; 和对象池，掌握内存泄漏排查工具——这是从&amp;quot;会写 Python&amp;quot;到&amp;quot;写好 Python&amp;quot;的分水岭。&lt;/p&gt;</description></item><item><title>Go 内存分配器深度解析：mcache、mcentral、mheap 三级架构与源码剖析</title><link>https://plumephp.com/122-go-runtime-malloc/</link><pubDate>Thu, 13 Aug 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/122-go-runtime-malloc/</guid><description>&lt;h2 id="引言为什么-go-需要自定义内存分配器"&gt;引言：为什么 Go 需要自定义内存分配器&lt;/h2&gt;
&lt;p&gt;如果你写过 C 语言，一定对 &lt;code&gt;malloc&lt;/code&gt; 和 &lt;code&gt;free&lt;/code&gt; 的繁琐与陷阱深有体会。内存泄漏、野指针、双重释放——这些问题构成了 C 程序员职业生涯中挥之不去的阴影。Go 语言通过垃圾回收（GC）机制将这些苦难从开发者手中接管了过来，但在运行时内部，内存分配仍然是一个需要精心设计的核心问题。Go 为什么不直接使用 glibc 的 &lt;code&gt;malloc&lt;/code&gt;，而要自己从零写一个复杂的内存分配器？答案藏在三个简单的数字里：&lt;strong&gt;并发、性能和碎片&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Go 垃圾回收器深度解析：三色标记、写屏障与并发回收的完整原理</title><link>https://plumephp.com/112-go-gc-tri-color/</link><pubDate>Thu, 13 Aug 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/112-go-gc-tri-color/</guid><description>&lt;h2 id="go-gc-的设计目标低延迟并发整堆回收"&gt;Go GC 的设计目标：低延迟、并发、整堆回收&lt;/h2&gt;
&lt;p&gt;Go 的垃圾回收器自诞生以来经历了多次重大演进。从 Go 1.0 的 STW 标记清除、到 Go 1.3 的并行标记、Go 1.5 的并发三色标记、Go 1.8 的亚毫秒 STW，再到 Go 1.21 引入的软内存限制，每一次迭代都将延迟和吞吐量推向更优的平衡点。Go GC 的核心设计目标可以用三个关键词概括：低延迟、并发、整堆回收。低延迟意味着 GC 的停顿时间（STW）必须足够短，不能影响交互式应用的服务质量。并发意味着标记和清除阶段尽可能地与用户代码并行执行，不独占 CPU。整堆回收意味着 GC 会扫描整个堆内存，不依赖于分代假说，虽然在某些场景下效率低于分代 GC，但实现简单且没有跨区域引用的问题。&lt;/p&gt;</description></item><item><title>数组与切片：Go 里最常被搞混的一对</title><link>https://plumephp.com/05-arrays-and-slices/</link><pubDate>Wed, 13 Aug 2025 10:00:00 +0800</pubDate><guid>https://plumephp.com/05-arrays-and-slices/</guid><description>&lt;h2 id="数组与切片go-里最常被搞混的一对"&gt;数组与切片：Go 里最常被搞混的一对&lt;/h2&gt;
&lt;p&gt;如果你问我 Go 语言里最容易让新手困惑的概念是什么，我一定会提到切片（slice）。&lt;/p&gt;
&lt;p&gt;很多从 Python、Java 或其他语言转过来的开发者，看到 Go 的切片都会觉得似曾相识——它看起来像 Python 的 list，又像 Java 的 ArrayList。但当你真正开始使用它的时候，会发现它的行为和你想的总是不太一样。&lt;/p&gt;</description></item><item><title>逃逸分析：理解 Go 的内存分配策略</title><link>https://plumephp.com/68-escape-analysis/</link><pubDate>Thu, 12 May 2022 09:15:00 +0800</pubDate><guid>https://plumephp.com/68-escape-analysis/</guid><description>&lt;h2 id="逃逸分析理解-go-的内存分配策略"&gt;逃逸分析：理解 Go 的内存分配策略&lt;/h2&gt;
&lt;p&gt;在 Go 中，你不需要像 C/C++ 那样手动管理内存，但这并不意味着你可以忽视内存分配。理解&lt;strong&gt;逃逸分析&lt;/strong&gt;（Escape Analysis）对于编写高性能的 Go 代码至关重要。&lt;/p&gt;</description></item><item><title>指针：没有你想的那么可怕</title><link>https://plumephp.com/go-pointers/</link><pubDate>Wed, 19 Feb 2020 15:22:00 +0800</pubDate><guid>https://plumephp.com/go-pointers/</guid><description>&lt;h2 id="指针没有你想的那么可怕"&gt;指针：没有你想的那么可怕&lt;/h2&gt;
&lt;p&gt;提到&amp;quot;指针&amp;quot;，很多人的第一反应是恐惧。这很正常——在 C/C++ 的世界里，指针确实是很多 bug 的根源：野指针、空指针、内存泄漏、缓冲区溢出……简直是一场噩梦。&lt;/p&gt;</description></item></channel></rss>