ITKeyword,专注技术干货聚合推荐

注册 | 登录

Memcache内存分配机制

u010187139 分享于 2015-07-22

推荐:miranda内存分配机制

Miranda里使用专门的函数分配和释放内存,分配内存的时候总是在前面多分配三个DWORD(12 bytes), 第一个DWORD用于存储内存块的大小(不包括这三个附加的DWORD) 第二

1. page(页)为内存分配的最小单位

Memcached 的内存分配以page为单位,默认情况下一个page是1M,可以通过-I参数在启动时指定。如果需要申请内存时,memcached会划分出一个新的 page并分配给需要的slab区域page一旦被分配在重启前不会被回收或者重新分配

这里写图片描述

2. Slabs(层)划分数据空间

Memcached 并不是将所有大小的数据都放在一起的,而是预先将数据空间划分为一系列slabs,每个slab只负责一定范围内的数据存储。如下图,每个slab只存储 大于其上一个slab的size并小于或者等于自己最大size的数据。例如:slab 3只存储大小介于137 到 224 bytes的数据。如果一个数据大小为230byte将被分配到slab 4中。从下图可以看出,每个slab负责的空间其实是不等的,memcached默认情况下下一个slab的最大值为前一个的1.25倍,这个可以通过修 改-f参数来修改增长比例。

这里写图片描述

3. Chunk(块)才是存放缓存数据的单位。

Chunk 是一系列固定的内存空间,这个大小就是管理它的slab的最大存放大小。例如:slab 1的所有chunk都是104byte,而slab 4的所有chunk都是280byte。chunk是memcached实际存放缓存数据的地方,因为chunk的大小固定为slab能够存放的最大值, 所以所有分配给当前slab的数据都可以被chunk存下。如果时间的数据大小小于chunk的大小,空余的空间将会被闲置,这个是为了防止内存碎片而设 计的。例如下图,chunk size是224byte,而存储的数据只有200byte,剩下的24byte将被闲置。

这里写图片描述

推荐:malloc内存分配机制

转自:http://hi.baidu.com/zkheartboy/item/a1795c44307517d3c1a59253   通过malloc分配1k的内存,系统实际上分配了多大的内存 malloc函数最终会请求windows的

4. Slab的内存分配。

Memcached在启动时通过-m指定最大使用内存,但是这个不会一启动就占用,是随着需要逐步分配给各slab的。

如果一个新的缓存数据要被存放,memcached首先选择一个合适的slab,然后查看该slab是否还有空闲的chunk,如果有则直接存放进去;如果没有则要进行申请slab申请内存时以page为单位,所以在放入第一个数据,无论大小为多少,都会有1M大小的page被分配给该slab。申请到 page后,slab会将这个page的内存按chunk的大小进行切分,这样就变成了一个chunk的数组,在从chunk数组中选择一个用于存储 数据。如下图,slab 1和slab 2都分配了一个page,并按各自的大小切分成chunk数组。

这里写图片描述

5. Memcached内存分配策略。

综合上面的介绍,memcached的内存分配策略就是:按slab需求分配page,各slab按需使用chunk存储。

这里有几个特点要注意,

1. Memcached分配出去的page不会被回收或者重新分配
2. Memcached申请的内存不会被释放
3. slab空闲的chunk不会借给任何其他slab使用

原文: http://www.open-open.com/lib/view/open1376034527667.html

推荐:android的内存分配机制

  ashmem是android的内存分配/共享机制,在dev目录下对应的设备是/dev/ashmem,相比于传统的内存分配机制,如malloc、 anonymous/named mmap,其好处是提供了辅

1. page(页)为内存分配的最小单位 Memcached 的内存分配以page为单位,默认情况下一个page是1M,可以通过-I参数在启动时指定。如果需要申请内存时,memcached会划分出一个新的 page并分配给需要

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。