每节点内存开销

时间:2015-04-01 11:41:59

标签: linked-list stack

我正在了解使用Stacks与链表的利弊,当我发现一个缺点说:"每个节点的内存成本可能远远超过存储的数据仓。 Ex等32位值(如整数)的内存开销可能比整数本身大7倍。"

这是什么意思?

1 个答案:

答案 0 :(得分:2)

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

修改

分配器通常在它返回的块之前添加一个“标题”,标题大小是一个分配大小步骤。对于16字节长的标头,您请求的分配大小将向上舍入到最接近的16乘法,并且对于标头增加16。因此,对于请求的大小1到16,您使用32个字节,对于17-32,您使用48,对于33-48,它是64,依此类推。