-2

今天的事实是,几乎所有为 PC、Xbox 或 PS3 发布的 AAA 视频游戏都是完全用 C++ 编写的。一些供应商表示他们不能迁移到 C#,因为他们内部重用的各种引擎的大型代码库已经在 C++ 中构建和测试(物理、渲染等)。在性能方面, C++ 代码比 C# 运行得更快是一个普遍接受的事实。

再次重申:为什么专业游戏开发行业通常使用 C++,我们为什么不使用?是不是因为一般的业务线应用程序不需要“您可以获得的最佳性能”和交易可靠性(内存泄漏、OOB、堆栈溢出)以换取“不重要”的性能?还是仅仅因为 C++ 通常比用 C# 编写的相同代码“更难维护”(模板、指针、malloc 等)?

还是因为在 C++ 中开发比在 C# 中开发相同的功能集“更耗时”,所以您无法实现尽可能多的功能?但即使在今天, UDKCryENGINE等许多高端游戏开发工具包也是完全用 C++ 编写的,它们的功能集在任何平台上都是最好的。因此,如果 C++ 对这些公司来说不是“更难”、“限制”或“错误”,那么为什么它在游戏开发或科学/HPC 行业之外的使用如此之少呢?

4

3 回答 3

8

它主要不是关于语言,而是平台。

在 .Net 中你不能使用 SSE,你使用 GPU 的能力是有限的;一些无锁多线程算法只能在本机代码中真正按照最初的预期(版本化指针)实现(如果多线程很重要,高效的无锁结构可以提供极大的速度改进);内存管理在 .Net 中是自动的,而在高性能场景中,您可以通过微管理内存(针对不同对象类型的单独迷你堆)获得巨大的速度优势,并且您可以通过内存进行向量化——这也链接回 SSE,其中通常,您将有多个指针通过大型缓冲区进行矢量化,将值馈送到 SSE 操作中。

仅举几例。

这些事情是商业应用程序通常不关心的事情,因为如果在这个级别上性能真的很重要,那么它很可能是它运行的服务器〜(桌面应用程序不太可能 - 即使在交易场景中它也可能是服务器这需要是实时的),而需要这种性能的企业只会使用更快的机器;或刀片中心。

在零售游戏环境中,它必须在许多不同的硬件配置上工作,因此尝试从用户正在运行的任何硬件中榨取最后一滴性能是有意义的。

I guess that more answers why C++ is used to code most games, rather than why .Net is ubiquitous in business - the lack of need of such performance potential is a factor, of course, as is I think the shorter development life cycle (generally speaking). However there are more factors.

In some ways, though, it's like comparing apples to cows. You select the tech that best fits the problem.

于 2012-10-25T07:40:46.327 回答
5

您总是需要优化应用程序的瓶颈

在游戏中,引擎的速度对应用程序的性能至关重要。因此,优化在那里是有意义的。

在一个业务线应用程序中,它花费 X 毫秒等待数据库查询的执行,并且 Y << X 毫秒绘制用户界面并执行实际的“业务代码”,优化 Y 没有意义。由于 X 是这里的关键因素,因此通常是用 C、C++ 或其他一些“高性能”语言编写的数据库引擎。

于 2012-10-25T07:39:52.407 回答
4

简而言之:C 或 C++ 使您可以在较低级别处理更多细节,因此您可以从可能的地方获得性能和内存增益,这确实是必需的,因为游戏对绘图和绘图的性能要求非常高不断地重绘事物。

然而,这些细节在公务应用程序中通常不需要,因为首先它们不会执行需要大量工作的“操作”,因此允许使用托管代码,即使这会给您带来一定的惩罚,它们不是很明显会导致物理工作量较低。所以关键是使用正确的工具来完成正确的工作。你不用滑板车做农业,也不需要拖拉机送披萨。

于 2012-10-25T07:39:28.123 回答