零 为什么要用内存池?
从前面的知识我们知道,当new 或者 malloc 的时候,假设您想要malloc 10个字节,
char * pchar = new char[10];
char *pchar1 = malloc(10);
实际上编译器为了 记录和管理这些数据,做了不少事情,类似这张图。
从上述看到,每new 一个 class都会使用这些字节:
4+(30到60)+(真的分配的10字节)(10到几十个)+4
也就是说:为了这10个字节,实际上背后服务的有更多的字节。
如果在某一个场景下,我们需要new 出来大量的class,例如卡牌的10连抽,100连抽,那么每次new一个class,都会有大量的背后服务的字节使用。有没有一种方法可以减少这种背后服务的字节数量呢?
因此C++的前辈们就搞了一个内存池。
一 内存池的概念和实现原理概述
概念:当malloc 或者 new 的时候,创建一个class 整倍数的