jemalloc源码结构分析(二):CPU字节对齐算法
2014-04-20 17:09
169 查看
在调用arena_malloc_small过程中,要根据申请内存大小,进行对齐计算,然后分配一个整块儿。算法如下:
1)定义一个SIZE_CLASSES宏,它主要用于生成后面两个表,small_size2bin与arena_bin_info数组;
2)根据small_size2bin查找当前申请内存块大小的对齐后的分组位置,再根据该位置到arena_bin_info数组查找对应补齐后的分配真实内存大小;
例子:需要申请a=1234字节大小的内存
1)以8个字节分组取整,a/8或a>>3获得small_size2bin中位置pos1;
2)small_size2bin[pos1]值为索引在arena_bin_info数组中查找,最终arena_bin_info[small_size2bin[pos1]]即对齐后需要分配的内存大小。
1)定义一个SIZE_CLASSES宏,它主要用于生成后面两个表,small_size2bin与arena_bin_info数组;
2)根据small_size2bin查找当前申请内存块大小的对齐后的分组位置,再根据该位置到arena_bin_info数组查找对应补齐后的分配真实内存大小;
例子:需要申请a=1234字节大小的内存
1)以8个字节分组取整,a/8或a>>3获得small_size2bin中位置pos1;
2)small_size2bin[pos1]值为索引在arena_bin_info数组中查找,最终arena_bin_info[small_size2bin[pos1]]即对齐后需要分配的内存大小。
申请大小范围(字节 ) | 对齐粒度大小(字节)被整除 | 描述 |
0~8 | 8 | 不足8字节的补齐为8字节 |
9~16 | 8 | 被8整除 |
17~128 | 16 | 可被16整除 |
129~256 | 32 | 可被32整除 |
257~512 | 64 | |
513~1024 | 128 | |
1025~2048 | 256 | |
2049~3584 | 512 |
相关文章推荐
- jemalloc源码结构分析(一):内存申请处理过程
- jemalloc源码结构分析(三):arena_malloc_small内存分布
- python源码分析----对象结构
- CTP源码分析1 CTP结构及概述
- Nginx源码分析---数组结构ngx_array_t
- nginx源码分析—数组结构ngx_array_t
- AndroidPN的学习研究(二)源码结构分析
- django源码分析----Related继承结构
- PostgreSQL源码目录结构及其相关模块功能分析
- Android4.0 Launcher 源码分析3——WorkSpace结构(滑动)
- nginx源码分析—数组结构ngx_array_t
- jQuery-1.9.1源码分析系列(十) 事件系统——事件体系结构
- Directfb【01】 基础模块和基本运行机制介绍 -- 源码结构分析图
- 数据结构之顺序存储结构(ArrayList源码分析)
- CTP源码分析6 CTP链路质量估计层结构及源码分析(五)----源码实现解读(二)
- H264分析源码学习之结构体篇——nal_t结构体
- CTP源码分析7 CTP路由引擎结构及源码分析(一)----TreeRoute.h头文件解读和概要介绍
- bootstrap源码分析系列:一,文件结构和开发环境