1、内存碎片是虚拟内存空间的概念。程序员看到的只有虚拟内存空间,物理内存空间是透明的。
2、内存碎片分两种:内部碎片和外部碎片。
3、内部碎片:内部碎片是之由于采用固定大小的内存分区,当一个进程无法完全使用分给它的固定内存区域时,就产生了内部碎片,通常内部碎片难以避免的。
4、外部碎片:是由于无规划的申请和释放内部,导致没有连续的整块内存区域,导致需要申请连续的内存区域时,无法申请成功。
5、非内存操作语言可以不用关心内存碎片的问题,因为心有余力不足。
6、对一块连续的内存进行无规划的申请和释放,会导致内存碎片的产生。
内存碎片的根源是由于brk系统调用,每次使用brk申请新的小内存区域,都会将堆顶指针向高地址推,而如果之前申请的内存释放了,但是新申请的未释放,就会导致堆顶指针无法紧缩,这种空闲下来的内存可以复用,只有新申请的内存区域小于或刚好等于这块区域的大小就可以使用,如果大了的话就无法使用,需要继续推动堆顶指针。