话说最近很长一段时间都是在看别人的代码和改别人的代码比较多,自己从头开始写东西好像已经是很久前才有过的事情了。改 TensorFlow 的过程中也学到不少东西,准备平时想到啥了就随便写着玩。
内存池简单地讲就是我自己首先用 malloc
向系统申请一大块内存,然后接下来再用到内存的时候手动从这大块内存中划,不用了还回去。这个之后申请、释放内存都是手动实现的,自己写个内存池的 malloc
和 free
来完成就好了。
具体用内存池的好处,网上好多人都有说,其实一般情况下自己手写的东西都还是比不上人家造好的轮子的,但在某些特殊的应用场景下手写会有很多好处。例如 Nginx 就有个自己的内存池,用来应对频繁的小块内存申请等等。
我之前遇到的场景主要是 RDMA 在发送数据前需要往 IB 卡上绑定内存,这个过程相当耗时,所以有个想法是开头申请一大块内存出来,之后收发数据时用的 buffer 都从内存池里面划,就能省去很多的时间了。
目前做的就是上面那个回答里面的第一条~
To be continued.