2. 内存碎片问题
内存碎片(Memory fragmentation)是指在使用动态内存分配和释放时内存空间被分割成大量不连续的小块,导致虽然总空闲内存足够,但无法分配连续大块内存的现象。
如下图所示
现在有 8 个字节连续的空间,可以存储 8个 1 字节数据和 4 个两个字节的数据。现在我们存储 6 个 1 字节数据 和 1 个 2 字节数据如下:
1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| | | | | | | |
+-----+-----+-----+-----+-----+-----+-----+-----+
现在程序运行,释放了编号为 2、4、6 的内存,结果如下:
1 3 5 7
+-----+ +-----+ +-----+-----+ +-----+
| | | | | | | |
+-----+ +-----+ +-----+-----+ +-----+
现在内存空余 3 个字节,但因为不连续,无法形成一个 2 字节的连续内存。因此分配 2 字节的内存空间会失败。
要解决这一问题需要软件开发人员进行规避。比如无论需要多大的内存都按最大的内存块进行分配空间。这样虽然浪费内存空间,但可以有效解决内存碎片问题。
当然还有很对软件的解决方法,请各位朋友自行搜索研究。