gpt4 book ai didi

linux - "memory cache"和 "memory pool"之间的区别

转载 作者:IT王子 更新时间:2023-10-29 00:31:59 26 4
gpt4 key购买 nike

通过阅读“理解 linux 网络内部结构”和“理解 linux 内核”这两本书以及其他引用资料,我很困惑,需要对“内存缓存”和 "memory pool" 做一些澄清。技巧。

1) 它们是相同还是不同的技术?

2) 如果不一样,是什么造成了差异,或者不同的目标?

3) 此外,Slab Allocator 是如何实现的?进来吗?

最佳答案

关于slab分配器:

因此,假设内存是平坦的,即您有一 block 4 GB 的连续内存。然后你的一个程序请求 256 字节的内存,所以内存分配器必须做的是从这 4 GB 中选择一个合适的 256 字节 block 。所以现在你的内存看起来像

<============256bytes=======================>

(每个 = 是一个连续的内存块)。一段时间过去了,许多使用内存操作的程序需要更多或更多或更少的 256 个 block ,因此最终您的内存可能看起来像:

<==256==256=256=86=68=121===>

所以它变得支离 splinter ,然后就没有您美丽的 4gig 内存块的踪迹了——这就是支离 splinter 。现在,slab 分配器会做的是跟踪分配的对象,一旦不再使用它们,它会说内存是空闲的,而实际上它会保留在某种列表中(您可能想阅读 FreeLists ).

现在想象一下,第一个程序放弃分配的 256 字节,然后一个新的程序想要拥有 256 字节,所以它可以重新使用最后释放的 256 字节,而不是分配主内存的新 block ,而不必去通过在物理内存中搜索适当的连续空间 block 的负担。这就是您本质上实现内存缓存的方式。这样做是为了整体减少内存碎片,因为您最终可能会遇到内存碎片太多以至于无法使用的情况,内存管理器必须施展魔法才能让您的 block 大小合适。使用 slab 分配器可以主动解决(但不能消除)问题。

关于linux - "memory cache"和 "memory pool"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7527080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com