gpt4 book ai didi

c++ - 在内存分配方面哪个更好 - 子对象或指向单独对象的指针?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:00 30 4
gpt4 key购买 nike

我在 Visual C++ 9 程序中遇到以下问题。有一个逻辑上包含多个子对象的巨大对象。我可以将子对象存储在对象内部,也可以存储指向单独分配的子对象的指针。

这里的关键点是,在一个外部对象中,每种类型的子对象总是有一个实例——它总是具有相同的大小,并且它的生命周期与外部对象完全相同,所以上面的两个选择在逻辑上是相同 - 程序结构和逻辑没有改变。

我的想法是这样发展的:

  1. 如果我将子对象存储在内部,遍历它们会稍微快一些,但这不是我最关心的 - 我分析了程序,这不是瓶颈。
  2. 如果我将子对象存储在外部对象中将占用更多内存,因此我将分配更大的 block ,与单独分配许多类似的小子对象相比,这可能会产生更多的内存碎片 - 释放的内存块可能不太可重用(我是不确定,我只是假设)。
  3. 当然,更少的分配会使程序更快,但这不是很重要 - 我再次分析了程序,分配时间不是瓶颈。
  4. 由于每次分配都会对较大的对象产生内存开销,因此我实际上会消耗较少的内存,这对处理大量数据的程序很有好处。

同时内存碎片真正困扰着我 - 我需要我的程序非常稳定并且能够连续运行数月。

我如何做出决定?鉴于上述考虑因素,是否有任何方法可以决定我应该选择较小的对象还是较大的对象?

最佳答案

与分配大量较小的对象相比,分配一些大对象会产生更少的内存碎片。更重要的是,由于更大比例的对象具有完全相同的大小,因此您通常能够完全按原样重用已释放的 block 。将您的对象拆分为大量较小的对象通常会使碎片更多成为一个问题,而不是更少。

如果您发现碎片确实成为一个问题,您通常希望通过定义自己的分配器来解决这个问题。

关于c++ - 在内存分配方面哪个更好 - 子对象或指向单独对象的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372139/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com