【发布时间】:2011-06-26 17:49:39
【问题描述】:
根据广泛传播的建议,我应该注意让我的大型软件项目尽可能模块化。当然有多种方法可以实现这一点,但我认为没有办法使用或多或少的接口类。
以C++开发2D游戏引擎为例。
现在,我们当然可以通过使用几乎所有东西的接口来实现一个非常模块化的系统:从渲染器(接口渲染器类 -> Dummy、OpenGL、DirectX、SDL 等),到音频到输入管理。
然后,例如,可以选择广泛使用消息传递系统。但从逻辑上讲,这些又要付出高昂的性能代价。
我应该如何构建这样的工作引擎?
我不想降低我的引擎在性能方面的限制(实体、粒子等的最大可行数量),只是为了让一个完美的模块化系统在后台运行。这很重要,因为我还想针对 CPU 能力和内存有限的移动平台。
例如,具有渲染器类的接口将涉及对时间要求严格的绘图操作的虚函数调用。仅此一项就会使引擎减速相当大。
以下是我的主要问题:
我应该在哪里划清模块化编程的一致性和性能之间的界限?
有哪些方法可以保持项目模块化,同时为时间关键型操作保持良好性能?
【问题讨论】:
-
我建议你将这个问题转发到codereview.stackexchange.com,并附上代码示例来说明问题。
-
我现在正处于项目的规划阶段,我几乎没有开始编写代码原型——所以我认为这将是一个问题哈哈
-
嗯,从接口进行虚拟调用的开销(在绝大多数情况下)可以忽略不计。 在分析代码之前,您无法确定。 如果性能影响很大,为什么不简单地消除接口并使用继承或组合呢?
-
我听说虚拟通话真的很慢,无处不在。所以我想即使没有分析,我也可以肯定它会对渲染性能产生显着的影响,尤其是在移动设备上。关于使用继承和组合,我不知道这是否适合这个问题,因为与使用接口相比,这将不再是真正的模块化。
-
顺便说一句,我真诚地希望你已经阅读this
标签: c++ class interface game-engine modularity