对内存管理的思考
- linux自带的内存管理其实挺好用的,那么我们为什么还要做一个上层的设计呢?做了这么长一段内存管理,突然想明白了它的作用。
- 其实无外乎三个主要目的:
- 减少内存占用
- 这个一般是通过列式存储自适应int位宽实现的。
- 行式存储没怎么见过。
- 避免系统频繁的内存分配(malloc/free)
- 几乎所有的内存管理系统都会考虑,因为系统malloc是有开销的,可以malloc一块更大的再一点点用,管理freelist。
- 提高cache命中率
- 最重要的一点,影响性能最大。
- 本质是根据业务情况,让数据按照用户取用的排布进行排布。如果每次都取一个对象的所有字段,那就按行式存储,把对象紧密排列;如果取的是各对象的某一属性,那就按属性排布在一起,就是列式存储了。
- 减少内存占用
- 对于持久化:
- 规则的内存排布会让持久化更加容易。
- 甚至可以在这个基础上做一些增量修改等功能。
- 对于malloc本身
- 像Tcmalloc / Jemalloc 都优化了系统自带的malloc,对于不同size的对象做了很好的缓存。