diff --git a/substrate/primitives/allocator/src/freeing_bump.rs b/substrate/primitives/allocator/src/freeing_bump.rs
index 64ba136f9a35486be513c225054a83a20e87abf2..e2a6b19e4a7f1a4058c7b2288856c0e786779250 100644
--- a/substrate/primitives/allocator/src/freeing_bump.rs
+++ b/substrate/primitives/allocator/src/freeing_bump.rs
@@ -60,8 +60,11 @@
 //!   fail.
 //!
 //! - Sizes of allocations are rounded up to the nearest order. That is, an allocation of 2,00001 MiB
-//!   will be put into the bucket of 4 MiB. Therefore, typically more than half of the space in allocation
-//!   will be wasted. This is more pronounced with larger allocation sizes.
+//!   will be put into the bucket of 4 MiB. Therefore, any allocation of size `(N, 2N]` will take
+//!   up to `2N`, thus assuming a uniform distribution of allocation sizes, the average amount in use
+//!   of a `2N` space on the heap will be `(3N + ε) / 2`. So average utilisation is going to be around
+//!   75% (`(3N + ε) / 2 / 2N`) meaning that around 25% of the space in allocation will be wasted.
+//!   This is more pronounced (in terms of absolute heap amounts) with larger allocation sizes.
 
 use crate::Error;
 use sp_std::{mem, convert::{TryFrom, TryInto}, ops::{Range, Index, IndexMut}};