Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在什么情况下,ATL CSIMPLE阵列是比CAtlArray更好的选择_Arrays_Atl - Fatal编程技术网

Arrays 在什么情况下,ATL CSIMPLE阵列是比CAtlArray更好的选择

Arrays 在什么情况下,ATL CSIMPLE阵列是比CAtlArray更好的选择,arrays,atl,Arrays,Atl,文档中说CSimpleArray用于处理少量对象。在这种情况下,什么是小的?CSimpleArray是一个不错的选择,还是应该始终使用不同的集合类,如CAtlArray?“小”这里有一条经验法则,它源于这两个类在内部管理内存的方式。基本上,CAtlArray对其使用的内存提供了更细粒度的控制,而CSimpleArray简单而朴素地处理内存 具体地说,当一个元素被添加到CSimpleArray时,如果该数组已经使用了它分配的所有内存,那么它的大小将翻倍,这是一个相当昂贵的操作。新创建的CSimpl

文档中说CSimpleArray用于处理少量对象。在这种情况下,什么是小的?CSimpleArray是一个不错的选择,还是应该始终使用不同的集合类,如CAtlArray?

“小”这里有一条经验法则,它源于这两个类在内部管理内存的方式。基本上,CAtlArray对其使用的内存提供了更细粒度的控制,而CSimpleArray简单而朴素地处理内存

具体地说,当一个元素被添加到CSimpleArray时,如果该数组已经使用了它分配的所有内存,那么它的大小将翻倍,这是一个相当昂贵的操作。新创建的CSimpleArray将以0个项目的空间开始。假设你想在一个数组中添加5个元素。它将如下所示:

  • 添加第一项-没有空间,因此重新分配总共1项的空间
  • 添加第二项-没有空间,因此重新分配总共2项的空间
  • 添加第三项-没有空间,因此重新分配总共4项的空间
  • 添加第四项-有空间,所以只需添加
  • 添加第5项-没有空间,因此重新分配总共8项的空间
  • 等等
还要注意的是,没有办法指定CSimpleArray的初始大小,因此这种模式总是会发生

另一方面,CAtlArray允许您通过SetCount()方法一次性指定分配的内存。使用与上面相同的示例,在添加项目之前,调用SetCount(5)。然后将始终有5个项目的空间,无需重新分配

所以要回答这个问题:如果你关心内存管理,尤其是担心性能的话,就使用CAtlArray。如果您只想在列表中保留一些项,而不关心如何管理列表占用的内存,请使用CSimpleArray。为了回答关于“小”和“大”在本文中的含义的具体问题,“小”意味着足够少的元素,您可以在每次长度超过2的下一次幂时重新分配

还值得注意的是,CSimpleArray允许您使用Find()方法搜索数组,而CAtlArray不允许

(注意:我的答案仅基于查看ATL源代码。)

这里有一条经验法则,它源于两个类内部管理内存的方式。基本上,CAtlArray对其使用的内存提供了更细粒度的控制,而CSimpleArray简单而朴素地处理内存

具体地说,当一个元素被添加到CSimpleArray时,如果该数组已经使用了它分配的所有内存,那么它的大小将翻倍,这是一个相当昂贵的操作。新创建的CSimpleArray将以0个项目的空间开始。假设你想在一个数组中添加5个元素。它将如下所示:

  • 添加第一项-没有空间,因此重新分配总共1项的空间
  • 添加第二项-没有空间,因此重新分配总共2项的空间
  • 添加第三项-没有空间,因此重新分配总共4项的空间
  • 添加第四项-有空间,所以只需添加
  • 添加第5项-没有空间,因此重新分配总共8项的空间
  • 等等
还要注意的是,没有办法指定CSimpleArray的初始大小,因此这种模式总是会发生

另一方面,CAtlArray允许您通过SetCount()方法一次性指定分配的内存。使用与上面相同的示例,在添加项目之前,调用SetCount(5)。然后将始终有5个项目的空间,无需重新分配

所以要回答这个问题:如果你关心内存管理,尤其是担心性能的话,就使用CAtlArray。如果您只想在列表中保留一些项,而不关心如何管理列表占用的内存,请使用CSimpleArray。为了回答关于“小”和“大”在本文中的含义的具体问题,“小”意味着足够少的元素,您可以在每次长度超过2的下一次幂时重新分配

还值得注意的是,CSimpleArray允许您使用Find()方法搜索数组,而CAtlArray不允许

(注意:我的答案仅基于查看ATL源代码。)