当前位置:  开发笔记 > 编程语言 > 正文

STL替代方案

如何解决《STL替代方案》经验,为你挑选了4个好方法。

我真的很讨厌使用STL容器,因为它们使我的代码的调试版本运行得非常慢.其他人使用什么代替具有合理性能的调试版本的STL?

我是一名游戏程序员,这对我所参与的许多项目都是一个问题.当你使用STL容器时,很难获得60 fps.

我的大多数工作都使用MSVC.



1> Jeff..:

EASTL是一种可能性,但仍然不完美.Electronic Arts的Paul Pedriana对游戏应用程序中的各种STL实现进行了调查,其摘要见以下内容:http: //www.open-std.org/jtc1/sc22/wg21/docs/papers/2007 /n2271.html

正在审查其中一些调整以包含在C++标准中.

请注意,即使EASTL也没有针对非优化案例进行优化.我有一个excel文件w /一段时间了一段时间但我想我已经失去了它,但对于访问它是这样的:

       debug   release
STL      100        10
EASTL     10         3
array[i]   3         1

我所取得的最大成功就是滚动自己的容器.您可以将这些降低到接近数组[x]的性能.


假设数组在堆上分配,范围检查被禁用\编译器设置为优化,我不相信C数组的访问时间比std :: vector快.

2> rasmusb..:

我的经验是,设计良好的STL代码在调试版本中运行缓慢,因为优化器已关闭.STL容器向构造函数发出大量调用,operator =在发布版本中进行内联/删除(如果它们很轻).

此外,Visual C++ 2005及更高版本在发布和调试版本中都为STL启用了检查.对于STL重型软件来说,这是一个巨大的性能.可以通过为所有编译单元定义_SECURE_SCL = 0来禁用它.请注意,在不同的编译单元中具有不同的_SECURE_SCL状态几乎肯定会导致灾难.

您可以创建第三个构建配置,并关闭检查并使用它来调试性能.我建议你保持一个调试配置,但是,因为它有助于捕获错误的数组索引和类似的东西.



3> 小智..:

如果您正在运行的视觉工作室,您可能需要考虑以下事项:

#define _SECURE_SCL 0
#define _HAS_ITERATOR_DEBUGGING 0

那只是为了迭代器,你正在进行什么类型的STL操作?您可能希望了解优化内存操作; 即,使用resize()一次插入多个元素,而不是使用pop/push一次插入一个元素.


这些常数应该是不言自明的吗?他们在做什么?

4> Vicent Marti..:

对于大型,性能关键型应用程序,根据您的需求构建自己的容器可能值得投入时间.

我在这里谈论真正的游戏开发.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有