【发布时间】:2013-03-19 00:26:51
【问题描述】:
我试图分解一个长的“主”程序,以便能够对其进行修改,也可能对它进行单元测试。它使用了一些庞大的数据,所以我犹豫了:
什么是最好的:进行函数调用,传递可能非常大(内存方面)的数据,
(a) 按值,或
(b) 参考
(非常大,我的意思是一些结构和小类的向量的映射和向量......甚至图像......可能真的很大)
(c) 或者拥有所有功能都可以访问的私有数据?这也可能意味着 main_processing() 或其他东西可以拥有所有这些的向量,而某些函数将只有一个项目......具有函数可测试的优势。
虽然我的问题与优化有关,但我试图将这个怪物分解成小怪物,我也不想耗尽内存。
如果我创建局部变量,我不太清楚我将拥有多少个数据副本。
有人可以解释一下吗?
编辑:这不是通用的“如何将非常大的程序分解为类”。该程序是一个大型解决方案的一部分,该解决方案已经分解为多个小实体。
我正在查看的可执行文件虽然相当大,但它是一个具有不可分割数据的单一实体。因此,数据要么全部创建为我已经创建的单个类中的成员变量,要么(全部)作为函数的参数传递。
哪个更好?
【问题讨论】:
-
这真的取决于。如果您的所有函数都可以分组到一个类中,那么类字段将是使数据可用于所有类函数的一种可接受的方式。否则,我会说非常大的数据几乎肯定应该通过 const 引用传递,假设数据本身没有在函数中修改。
-
数据本身已被修改...因此,如果我可以将所有函数分组到类中,这与将它们全部放在“main”中一样吗?
-
我认为这两种实现在速度或内存使用方面没有太大(如果有的话)差异。因为无论哪种方式,您都不会创建任何额外的数据副本,除非您按值传递(几乎可以肯定不应该使用大量数据)。
-
谢谢。如果您想发布答案,我愿意接受。
-
C++11?你听说过移动语义吗?您可以编写代码,其中数据通过 move 传入并通过 move 返回,几乎没有开销。
标签: c++ class function optimization