这是试图改述我之前提出的问题.我想知道为什么C++似乎是某些胖客户端应用程序的首选语言.我能想到的最简单的例子是视频游戏和我最喜欢的应用程序VirtualBox.
请不要关闭这篇文章我只是想了解为什么会这样.
作为一个专注于AAA游戏的专业游戏,我可以告诉你.原因1是C++,C将在任何平台上编译和运行,例如PS3或NDS.下一代平台制造商只提供强大的C库来与硬件接口.这背后的原因是C和C++是免费的,并非由一家公司拥有,因为它们是为接近金属低级编程而设计的.这意味着游戏开发者需要知道形成反馈循环的C/C++.然而,现在许多开发人员使用C#或Java制作他们的工具集,但这是因为性能并不重要.
现在这种态度似乎对大多数网络开发人员来说都很狂热,但是游戏需要处理整个复杂模拟片段并且每秒渲染高达60次,很少有网络应用程序必然会保持在该延迟率范围内,因此需求也不同.同样的原因使用C++生成的Web服务很少.
然而,由于开发速度的提高和微调游戏的能力,高级AI和游戏玩法(规则)都是脚本化的.另外因为这相当于大约15%的资源,所以我们可以挥霍一下,让设计师完成他们的工作.另请注意,即使在C++中完成,编码灵活的规则系统也会占用相同的资源.哦,并不是所有的平台都允许Jit代码,这将是不错的:)
当然,正如所提到的内存控制,如果你使用的内存比硬件提供的内存多1个字节,它就不会像PC一样慢速运行.它崩溃了.所以我们喜欢我们的裸指针,自定义分配器和RAII.
有很多潜在的原因:
速度增加无论是感知还是真实.
以前的知识.有很多人一直在编程C++ 20多年.C#不是这样.
现有代码.的确,.Net在框架中包含了很多功能.即使这样,它仍然无法与C++中存在的数十年的库相比.
跨平台开发.C++更容易移植.
确定性.我会毫无瑕疵地从ctacke的回答中窃取.他总结得最好,但能够确定在非常低的水平发生什么事情对于编写像时间关键的游戏这样的东西非常必要.
对于大量应用程序,它归结为速度和确定性.
本机代码运行得更快,因为您有一个编译器可以花时间在创建机器语言时做最好的工作.唯一需要等待的人是开发人员.托管代码必须在运行时从IL转换为机器语言.快速完成它比以最佳形式获得它更重要,因为用户必须等待它发生.更好的速度==更好的用户体验.
决定论是许多事情(比如游戏)的关键,因为你想知道什么时候需要时间的事情会发生.当我进行内存分配或释放时,需要时间.我希望当我们加载一个新的游戏关卡时没有人会注意到,而不是当用户正在扫射时他的朋友在最终的死亡比赛中被他的屁股击落.一个口吃最终会在房间的另一边与诅咒和游戏控制器结束.使用本机代码,您可以明确控制何时发生这些事情.使用托管代码,GC会决定何时发生这种情况,并且无法准确知道何时或多长时间.