每个节点的内存开销

Per-node memory overhead

我正在了解将 Stacks 与链表一起使用的优缺点,当时我发现一个缺点是:“每个节点的内存成本可能远远超过存储的数据仓。例如 32 位值,例如因为整数的内存开销可能是整数本身的 7 倍。"

这是什么意思?

当您使用通用内存分配器时,您不知道它为每个请求分配了多大的块。他们中的许多人将请求的大小四舍五入到某个偶数,以便每个块都与一个可整除的地址对齐,比如说,被 8 或 16,甚至 32 整除。在这种情况下,你 总是 使用至少 32 个字节,即使您只请求 1 个字节。那么对于一个 4 字节的数据,你得到 32 字节的堆,这是你真正需要的 8 倍,因此开销等于 7.

编辑

通常,分配器会在 returns 块之前添加一个 'header',而 header 大小是一个分配大小步长。对于 header 16 字节长,您请求的分配大小将四舍五入为最接近的 16 乘法,并为 header 增加 16。因此,对于请求的大小 1 到 16,您使用 32 个字节,对于 17-32,您使用 48,对于 33-48,它是 64,依此类推。