Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
我应该使用标准C++;用于游戏和其他实时活动的容器和物品? 我是一个使用VS 2012和VS 2010开发AAA标题的C++开发人员。我读过关于不使用STL和VS附带的标准标题中提供的其他内容。我在基于游戏编程的网站上阅读了大部分内容,其中一些内容来自业内知名人士。我见过这样的情况,他们甚至不使用向量、列表、地图和其他工具,甚至不使用实用函数和算法。在这种情况下,他们自己编写容器和东西,这些容器和东西具有几乎相同的接口,并且在如此庞大的代码上花费了大量的调试和实现时间_C++_Optimization_Stl_Game Engine - Fatal编程技术网

我应该使用标准C++;用于游戏和其他实时活动的容器和物品? 我是一个使用VS 2012和VS 2010开发AAA标题的C++开发人员。我读过关于不使用STL和VS附带的标准标题中提供的其他内容。我在基于游戏编程的网站上阅读了大部分内容,其中一些内容来自业内知名人士。我见过这样的情况,他们甚至不使用向量、列表、地图和其他工具,甚至不使用实用函数和算法。在这种情况下,他们自己编写容器和东西,这些容器和东西具有几乎相同的接口,并且在如此庞大的代码上花费了大量的调试和实现时间

我应该使用标准C++;用于游戏和其他实时活动的容器和物品? 我是一个使用VS 2012和VS 2010开发AAA标题的C++开发人员。我读过关于不使用STL和VS附带的标准标题中提供的其他内容。我在基于游戏编程的网站上阅读了大部分内容,其中一些内容来自业内知名人士。我见过这样的情况,他们甚至不使用向量、列表、地图和其他工具,甚至不使用实用函数和算法。在这种情况下,他们自己编写容器和东西,这些容器和东西具有几乎相同的接口,并且在如此庞大的代码上花费了大量的调试和实现时间,c++,optimization,stl,game-engine,C++,Optimization,Stl,Game Engine,我有两个问题: 1:不是为了实现更好的性能而为VS优化的C++实现吗?它不是在使用一些客户端人员不知道的固有函数吗?在插入、删除、查找、交换、复制等基本容器操作中,提供自己的实现确实会更慢一些?让我们假设我们提供自己的自定义分配器,以便对使用的每个容器进行更快的内存管理。此外,它们还处理碎片、对齐和其他问题。为什么开发具有几乎相同接口的定制容器,为什么不花时间编写分配器和其他可能有用的东西呢 2:有时候我们会在一个巨大的代码库中通过标准头包含很多不必要的东西。不必要,因为我们只需要从如此巨大的

我有两个问题:

1:不是为了实现更好的性能而为VS优化的C++实现吗?它不是在使用一些客户端人员不知道的固有函数吗?在插入、删除、查找、交换、复制等基本容器操作中,提供自己的实现确实会更慢一些?让我们假设我们提供自己的自定义分配器,以便对使用的每个容器进行更快的内存管理。此外,它们还处理碎片、对齐和其他问题。为什么开发具有几乎相同接口的定制容器,为什么不花时间编写分配器和其他可能有用的东西呢

2:有时候我们会在一个巨大的代码库中通过标准头包含很多不必要的东西。不必要,因为我们只需要从如此巨大的头中提取一两样东西,包括其他巨大的头等等。现在,我知道除非使用模板,否则不会实例化模板,模板中的成员函数也是如此。因为这些都是预编译的头文件,所以可以安全地假设这些不必要的东西没有编译时命中。我的问题是,这种包含对代码大小(可执行文件)是否有任何隐藏的影响,这种影响随着代码库的巨大增长而增长?在我看来不应该,但我想知道我没有弄错,以防万一

谢谢

  • STL针对通用计算的性能进行了优化。许多应用程序都具有特定的特性,可以利用这些特性来提高性能(尽管可能只是略微提高),而不是完全通用的解决方案所提供的性能。同时,许多人确实编写了自己的容器,但最终的性能却很差,因为他们对问题的理解不够透彻,或者由于测试有限(相对于大多数接受近乎无限测试的STL实现而言)而从未发现错误

  • 不,仅仅包含大量头文件通常不会对运行时性能造成任何损害

  • 除了你的具体问题,如果你正在开发AAA游戏,你应该向你的同龄人寻求关于这些问题的指导。任何AAA工作室都会有至少一到两名更有资格亲自向您提供更详细的建议的人员


    最后,尽管STL和C++标准库的某些部分对一些常用用例(例如STD::ListIONIOFSUSTORKS)的性能不理想,但其他部分通常是相当好的(STD::vector,STD::复制)。没有适用于整个语言的规则……如果有,我们可能会使用另一种语言

    这取决于工作室。你可以根据问题的拓扑结构编写分配器来提高内存性能,你可以用完全相同的理由创建你的特征

    STL是一个令人惊奇的工具,它的使用问题是许多程序员不知道如何使用它,最终使用他们自己的类来完成基本的事情

    <> P.E.G,我的实际公司有一组用C++编写的库来避免STL,在12多年后,我发现了字符串实现中的基本错误,而另一个同事在地图中找到了另一个错误。
    STL可以燃烧的很快,你知道怎么做。您应该看看英特尔TBB+自定义分配器+stl性能。仔细看看这个问题

    很多游戏都使用标准库。EA甚至编写了自己的版本。我认为我不会在游戏中使用iostreams,因为大多数实现都很慢(可能是因为设计的某些属性,但还没有人确定)。除此之外,标准库的主要问题是它基于复制。但这很容易解决,而不是相反。标准库的可用性是一件好事,应该在大多数地方使用。它消除了维护基本功能的负担。但是,如果应用程序的某个核心部分因使用标准库而受到不利影响,那么是时候卷起袖子,编写解决该问题的函数了。最近,我读了一篇文章,其中谈到了这个主题,希望您喜欢。这篇文章写的都是“过早优化”。如果您从事AAA标题的工作,我相信您拥有所有资源和知识渊博的同行,他们能够分析广泛使用(或:将要使用)的标准库实现的性能特征,并据此做出决策。如果你不去衡量,它就会变成一个基于意见的决定,或者更糟,一个基于道听途说的决定。通常,在标准库中,您会发现您只需要一小部分,并且只有一小部分对运行时性能有贡献,因此您只需要根据需要使用自定义实现来替换这些实现。