(动态内存分配)为什么最大化峰值利用率?
(Dynamic Memory Allocation) why maximize peak utilization?
我在看一本教科书,上面说:
我完全迷路了,让我们说:
n = 10 和 p(所需有效负载)= 800 字节,
这是否意味着在第 9 个分配请求的 n = 9 上,P9 需要 792 字节(假设一个单个最小分配是 8 个字节)?我的理解正确吗?
这背后的假设是内存是一种宝贵的商品,我们应该尽量避免浪费它。如果峰值利用率很低,则意味着为未使用的堆保留了大量内存。
峰值利用率不指代任何特定的分配。 Pi 是来自 i
个连续请求的总负载。因此,在此分析中引用单个 p = 800 bytes
没有意义。 maxi≤kPi 是 Pi 的图的峰值来自 request 0
到 k
。每次分配都会增加堆利用率,尽管释放会降低它。
您需要足够的堆内存来满足您同时分配的最大内存量,但如果您有更多内存,那么其余的都将被浪费。最大化峰值利用率意味着尝试找到这个最佳点。
据我理解的文本,分配器 objective 是最大化 Pi (即时分配的内存总和 i). k 的峰值利用率是在 k.
时可以分配的最大值除以堆大小的比率
由于在i处有多个alloc和free,如果allocator太基础并且不能很好地处理请求,它可能无法回答另一个分配请求(例如由于堆碎片,请参见下面的示例)。
智能分配器可能允许最大负载,但代价是响应较慢。
相反,您可能有一个快速分配器,在多次请求后可能无法最大化总负载 Pk。
举一个(简单的)例子,有那个请求链
R1: alloc(1000)
R2: alloc(2000)
R3: alloc(1500)
R4: free(R1)
R5: free(R2)
R6: alloc(3000) => use space from R1+R2?
在 R6 上,基本分配器可能无法理解它可以重用从 R1 和 R2 释放的 space,给出较低的 peak 比率,并且堆尺寸不必要地比它应该的高。
一个更聪明的人可能会这样做,但可能会以更多 CPU / 资源为代价。
我在看一本教科书,上面说:
我完全迷路了,让我们说:
n = 10 和 p(所需有效负载)= 800 字节,
这是否意味着在第 9 个分配请求的 n = 9 上,P9 需要 792 字节(假设一个单个最小分配是 8 个字节)?我的理解正确吗?
这背后的假设是内存是一种宝贵的商品,我们应该尽量避免浪费它。如果峰值利用率很低,则意味着为未使用的堆保留了大量内存。
峰值利用率不指代任何特定的分配。 Pi 是来自 i
个连续请求的总负载。因此,在此分析中引用单个 p = 800 bytes
没有意义。 maxi≤kPi 是 Pi 的图的峰值来自 request 0
到 k
。每次分配都会增加堆利用率,尽管释放会降低它。
您需要足够的堆内存来满足您同时分配的最大内存量,但如果您有更多内存,那么其余的都将被浪费。最大化峰值利用率意味着尝试找到这个最佳点。
据我理解的文本,分配器 objective 是最大化 Pi (即时分配的内存总和 i). k 的峰值利用率是在 k.
时可以分配的最大值除以堆大小的比率由于在i处有多个alloc和free,如果allocator太基础并且不能很好地处理请求,它可能无法回答另一个分配请求(例如由于堆碎片,请参见下面的示例)。
智能分配器可能允许最大负载,但代价是响应较慢。
相反,您可能有一个快速分配器,在多次请求后可能无法最大化总负载 Pk。
举一个(简单的)例子,有那个请求链
R1: alloc(1000)
R2: alloc(2000)
R3: alloc(1500)
R4: free(R1)
R5: free(R2)
R6: alloc(3000) => use space from R1+R2?
在 R6 上,基本分配器可能无法理解它可以重用从 R1 和 R2 释放的 space,给出较低的 peak 比率,并且堆尺寸不必要地比它应该的高。
一个更聪明的人可能会这样做,但可能会以更多 CPU / 资源为代价。