跟着卷卷龙一起学Camera--内存池浅析05

116 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

这里主要介绍一些常用的内存池类型。以及需要考虑的问题。

定长内存分配器

优点:简单。分配和释放的效率高,解决实际中特定场景下的问题有效。 缺点:功能单一。只能解决定长的内存需求

线程安全

如果你的程序有大量线程申请释放内存,那么这种方案下锁的竞争将会非常激烈,线程这样的场景下使用该方案不会有很好的性能。 内存池不应该局限在单线程场景,多线程的时候,直接给内存池一把锁保护就可以了。 如果你的程序有大量线程申请释放内存,那么这种方案下锁的竞争将会非常激烈,线程这样的场景下使用该方案不会有很好的性能。

线程局部存储

我们可以创建一个全局变量,因此所有线程都可以使用该全局变量,但与此同时,我们将该全局变量声明为线程私有存储,那么这时虽然所有线程依然看似使用同一个全局变量,但该全局变量在每个线程中都有自己的副本,变量指向的值是线程私有的,相互之间不会干扰。 如:__thread int a = 1; // 线程局部存储

既然多线程使用线程池存在竞争问题,那么干脆我们为每个线程维护一个内存池就好了,这样多线程间就不存在竞争问题了。线程局部存储,正是用于解决这一类问题。