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

sha*_*oth 5 c++ memory-management visual-c++

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

这里的关键点是,在一个外部对象中始终存在每个类型的子对象的一个​​实例 - 它总是具有相同的大小,并且其生命周期与外部对象的生命周期完全相同,因此上面的两个选择在逻辑上是相同的 - 程序结构和逻辑不会改变.

以下是我的思想发展方式:

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

与此同时,内存碎片让我感到困扰 - 我需要我的程序非常稳定,能够连续几个月运行.

我该如何做出决定?考虑到上述因素,是否有任何方法可以决定是否应该选择较小的物体或较大的物体?

Jer*_*fin 2

与分配大量较小对象相比,分配一些大对象所产生的内存碎片更少。更重要的是,由于大部分对象的大小完全相同,因此您通常可以完全按原样重用已释放的块。将对象拆分为大量较小的对象通常会使碎片问题变得更加严重,而不是更少。

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