我正在阅读一些实时操作系统规范,我读到在 RTOS 中,我们通常不喜欢使用 malloc。这样做的原因是:出于性能问题,我们不应该使用 malloc,因为通过 malloc 分配内存非常耗时,而且跟踪分配的内存的开销也更高。
现在在实时系统中,所有进程都有时间限制,我们一般不使用malloc。我很好奇并开始研究一些类似于在 RTOS 运行时实际分配内存的方式,然后我发现了内存池。现在有人写道,内存池实际上意味着固定大小的块分配。现在内存池的优点是它不会受到碎片的影响。这怎么可能?假设我们有 3 个 4 字节的池,而应用程序需要 10 字节,那么在这种情况下,内存池将受到内部碎片的影响。
内存池如何工作以及如何分配内存?应用程序是否在编译时获得池,就像特定应用程序将从 4 字节的池大小中获得 3 个池一样?如果他们需要的内存无法放入池中怎么办。这样的系统中是否存在许多不同大小的内存池?请给我解释一下。