As the title states im having some difficulties analzying the average-case memory usage of a memory allocator (quick-fit). My goal is to determine the average-case internal fragmentation of an allocated block (using quick-fit memory allocator).
So far i haven’t really gotten anywhere, since i dont really know how to analyze the average-case. My first thoughts was, assume you have T(n), that is the memory being wasted when allocating a memory-block of size n(internal fragmentation). Further, assume that the probabilty for allocating a memory-block of size n is P(n), then the average case memory-waste should basically be the sum of T(n1)P(n1)+(Tn2)P(n2)+….+T(nk)P(nk)
The problem is that i don’t know T(n) and P(n)..or is it even possible without making any assumptions?
For the worst-case i simply think it is O(n-1)=O(n). Since in the worst case we only have one “quick-list” the one handled by, let say, first-fit. Then the worst possbile scenario is that we only have one big block of size n bytes available for allocation, and the requested memory is only 1byte then n-1 bytes is wasted at most?
I might not make any sense, but any help in making this a bit clearer is appreciated.
Thanks
Let T(n) be the space wasted when a n size allocation is made. It should be very straightforward to calculate T(n), right? For a block size of b, T(n) = b – (n%b) ?
The second part is more nuanced. It would depend on the distribution of allocation request size. You can probably assume wastage to be uniform, in which case your average waste would be b/2.
Derivation of b/2: Probability of having wastage i is 1/b for any i (uniform assumption). The expected wastage = sum_i Probability_i Wastage_i = 0/b + 1/b+….+ (b-1)/b = (b-1)/2 which is approximately equal to b/2.