linux中频繁分配malloc以致的内存碎片是指什么
linux中频繁分配malloc导致的内存碎片是指什么?
我们都知道内存碎片包括:内部碎片和外部碎片
但是以上的概念都是针对没有虚拟内存的条件下说的,直接对映我们的物理内存
但是linux系统中,我们都是通过虚拟内存地址和物理地址通过分页机制完成对映的
那么频繁使用malloc(),为什么会导致内存碎片??这里的内存碎片是指由于虚拟的线性地址空间不够的内存碎片,还是由于物理内存不够的内存碎片??
1、如果内存碎片定义为,线性地址空间不够导致。那么malloc频繁分配会导致内存碎片就好理解了
2、如果内存碎片定义为物理内存不够,那么为什么频繁分配malloc会导致内存碎片呢??
另外我们的malloc函数,如果是优化过的linux中的pmalloc()函数,那么本身就优化了,那么此时频繁使用,会不会产生内存碎片?如果产生,是什么原因导致的??
最后网上经常说要使用自己写的内存池,那么很多malloc的函数库,本身就使用了内存池,比如pmalloc,为什么我们还要去重复写内存池??
------解决思路----------------------
为什么自己写,是因为软件使用内存都是有具体应用的。有的需要自由链表来维护,免得经常需要去malloc。有的偶尔需要,就malloc一块打得给他用。
具体很多知识都是细节的,一时半会说不清楚。需要自己多多看书多多积累就能明白其中奥义
我们都知道内存碎片包括:内部碎片和外部碎片
但是以上的概念都是针对没有虚拟内存的条件下说的,直接对映我们的物理内存
但是linux系统中,我们都是通过虚拟内存地址和物理地址通过分页机制完成对映的
那么频繁使用malloc(),为什么会导致内存碎片??这里的内存碎片是指由于虚拟的线性地址空间不够的内存碎片,还是由于物理内存不够的内存碎片??
1、如果内存碎片定义为,线性地址空间不够导致。那么malloc频繁分配会导致内存碎片就好理解了
2、如果内存碎片定义为物理内存不够,那么为什么频繁分配malloc会导致内存碎片呢??
另外我们的malloc函数,如果是优化过的linux中的pmalloc()函数,那么本身就优化了,那么此时频繁使用,会不会产生内存碎片?如果产生,是什么原因导致的??
最后网上经常说要使用自己写的内存池,那么很多malloc的函数库,本身就使用了内存池,比如pmalloc,为什么我们还要去重复写内存池??
------解决思路----------------------
为什么自己写,是因为软件使用内存都是有具体应用的。有的需要自由链表来维护,免得经常需要去malloc。有的偶尔需要,就malloc一块打得给他用。
具体很多知识都是细节的,一时半会说不清楚。需要自己多多看书多多积累就能明白其中奥义