http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html
根据那篇文章,STL不适合游戏开发。 你对此有何看法?
我目前的做法是: 使用STL,如果导致性能问题与homebrew容器(或分配器)交换(还没有来,但我没有做高端的3D游戏;)
答案 0 :(得分:10)
在这种情况下,您的方法是唯一合理的选择。优化的规则#1是“除非你确切知道瓶颈在哪里,否则不要进行优化”。
您应该仍然可以在以后相对容易地交换容器,特别是如果您使用通过typedef定义的类型而不是直接使用STL容器。我的意思是:
#include <vector>
typedef std::vector<int> MyIntVectorType;
int main()
{
MyIntVectorType theVector;
}
答案 1 :(得分:6)
你必须知道STL在幕后做了什么。例如,如果您使用向量,例如,不要让它任意增长,请使用vector :: resize()预先进行分配,这样它只分配一次。类似的东西。你的方法并不差 - 只需做好功课。
答案 2 :(得分:2)
如果您刚开始使用游戏编程,请继续使用STL,这很棒且稳定。你最好使用一些有效且稳定的东西,而不是开始刮擦fps或两个。然而,以下是许多主要工作室不使用它的两个原因。
拥有容器的自定义版本并不是一项微不足道的工作,只有在值得的时候才能这样做。
答案 3 :(得分:1)
使用STL,如果它在可接受的性能范围内工作,请保留它。如果没有,请尝试别的。在尝试现有实现之前,您不希望重写已存在的内容。
答案 4 :(得分:1)
C ++中许多与执行相关的问题已在C++0x中得到修复。
答案 5 :(得分:1)
您可能希望查看专为游戏设计的EASTL内容。
编辑:道歉,我认为问题中的链接是另一篇文章。
答案 6 :(得分:1)
有时它不是需要替换的容器,而是包含的对象。我曾经有一个大的std :: map,它有一个键的字符串,而且太慢了。我意识到我的所有键都是相同的大小,所以我用一个专门的版本替换了字符串类,我把它作为一个固定大小的char缓冲区的包装器,并且性能不再是问题。
知道你的瓶颈在哪里,并且不要以为你可以编写任何更快的版本,除非你可以做出大量的简化假设。
答案 7 :(得分:1)
您还可以将STL容器中的分配器交换为自定义分配器。