繁体   English   中英

C ++容器:最佳内存管理

[英]C++ Containers: Optimal Memory Management

我想实现一个容器。 数据将存储在动态分配的数组中。 我需要有关内存重新分配的建议。

基本上,我想要一个公式,确定数组满时应该使数组大多少。 我认为常量值将不是最佳值,因为数组越大,复制它所花费的时间就越长。

例如,如果一个数组可以存储1000000个双精度数,并且数组已满,那么重新分配1000005个双精度数将是愚蠢的。 争取1001000是一个更好的主意。 相反,如果我有一个由5个double组成的数组,并且数组已满,则将其放大到1005个单元同样是愚蠢的。 也许每次都将它放大10%(或像20 + 10%一样,以便在小型阵列上也可以)是一个更好的主意。 有什么建议吗?

我将从重用std :: vector开始。 不要重新实现已经很好的工作。

如果您知道有关数据大小的信息,请使用reserve()函数以确保分配的频率不会超出您的需要。 如果您不确定确切拥有多少数据,可以随意保留20%或40%的额外空间。

如果您不了解数据大小,则可以优化std :: vector以获得良好的性能,而无需了解任何信息。 如果您对数据的大小一无所知,那么您将很可能拥有10001个条目,并且向量将浪费大量的空间,而您将拥有9999个条目,并且向量将避免使用不太积极的算法选择的4或5个浪费的副本。 Std :: vector实现可在数百个工时内进行微调,以确保当用户没有有关尺寸调整的信息时可以实现最佳行为。

我唯一会偏离的时间是当您开始进入千兆字节数据集时。 然后,最好不要分配太大而无法放入内存的内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM