用 cpp 实现了一个简单的内存池
拼尽全力无法战胜 new/delete
在读了内存管理 一章后,我想要动手实现一个简单的内存池
这里主要实现了用 hash_bucket 和 three_tiered 的方式实现内存池
这个只是一个简单的通过 hash 函数对不同大小的内存进行分区,达到减少内存碎片的目的 但是在测试之后,只有在特定的测试环境下可以做到比 malloc new 更快。详情见HashMemoryPool项目文档
这里主要想仿照 linux 的文件系统的 页表 ,通过三级缓存改进内存池的性能
参考了 Google 的 TCMalloc
内存碎片主要分为 外碎片 和 内碎片
假设有 4MB 的内存,先后打开了三个程序,分别占用 1MB 2MB 1MB 接着第一个和第二个程序运行结束、退出。接着打开第四个程序,要用 1.5MB 大小的空间,虽然此时总内存大小是 2MB 的,但是是不连续的,因此第四个程序一定要等第二个程序运行结束才可以运行。当然了,此时也可以将第二个程序换入硬盘然后再换出,但是这里有两个缺点
- 硬盘访问速度比内存慢
- 此时会造成机器的卡顿
内存分配必须起始于 4 8 16 整除的地址,因此当内存分配非倍数内存的时候,会多出来一部分,这里多出来的部分就是 内碎片 通过对不同内存大小的程序的分类,可以做到减少内碎片