# 4.3 memcached的內存管理
最近的 memcached 默認情況下采用了名為 Slab Allocator 的機制分配、管理內存。在該機制出現以 前,內存的分配是通過對所有記錄簡單地進行 malloc 和 free 來進行的。但是,這種方式會導致內存 碎片,加重操作系統內存管理器的負擔,最壞的情況下,會導致操作系統比 memcached 進程本身還 慢。Slab Allocator 就是為解決該問題而誕生的。
下面來看看 Slab Allocator 的原理。
下面是 memcached 文檔中的 slab allocator 的目標:
>the primary goal of the slabs subsystem in memcached was to eliminate memory fragmentation issues
totally by using fixed-size memory chunks coming from a few predetermined size classes.
也就是說,Slab Allocator 的基本原理是按照預先規定的大小,將分配的內存分割成特定長度的塊,
以完全解決內存碎片問題。
Slab Allocation 的原理相當簡單。將分配的內存分割成各種尺寸的塊(chunk),并把尺寸相同的塊
分成組(chunk 的集合)

而且,slab allocator 還有重復使用已分配的內存的目的。也就是說,分配到的內存不會釋放,而是重復利用。
Slab Allocation 的主要術語
`Page`
分配給 Slab 的內存空間,默認是 1MB。分配給
`Slab`
之后根據 slab 的大小切分成 chunk。
`Chunk`
用于緩存記錄的內存空間。
`Slab Class
特定大小的 chunk 的組。
下面說明 memcached 如何針對客戶端發送的數據選擇 slab 并緩存到 chunk 中。
memcached 根據收到的數據的大小,選擇最適合數據大小的 slab。memcached 中保存著 slab 內空閑 chunk 的列表,根據該列表選擇 chunk,然后將數據緩存于其中。

- 概要
- 1 分布式存儲fastDFS
- 1.1 fastDFS 通用介紹
- 1.2 fastDFS安裝和使用
- 1.3 基于fastDFS實現分布式
- 2 緩存數據庫redis快速搭建
- 2.1 環境安裝
- 2.2 redis數據類型
- 2.3 redis訂閱發布模式
- 2.4 redis事務
- 2.5 redis備份
- 3 redis詳細攻略
- 3.1 redis簡介
- 3.2 redis使用場景
- 3.3 redis基本操作
- 3.4 redis數據類型
- 3.4.1 字符串
- 3.4.2 HASH-字典
- 3.4.3 List-列表
- 3.4.4 Set-集合
- 3.4.5 Sorted Set-有序集合
- 3.4.6 訂閱-發布
- 3.4.7 事務
- 3.5 redis配置文件
- 3.6 持久化
- 3.7 redis性能測試
- 3.8 redis-C-API
- 3.9 redis-C++-API
- 3.10 總結與建議
- 4 memcache緩存數據庫
- 4.1 什么是memcached
- 4.2 memcached的特征
- 4.3 memcached的內存管理
- 4.4 如何使用memcached
- 4.5 memcached參數詳解
- 4.6 memcached安裝
- 4.7 memcached-C客戶端
- 4.8 memcached-C++客戶端
- 5 Nginx
- 6 FastCGI
- 6.1 CGI
- 6.2 FastCGI
- 6.3 Nginx與FastCGI
- 7 Nginx上部署fastDFS
- 8 項目概要
- 8.1 上傳文件功能
- 8.2 主界面顯示與下載文件功能
- 8.3 注冊功能
- 8.4 登陸功能
- 8.5 文件分類功能
- 8.6 個人網盤功能
- 8.8 秒傳功能