EASTL 与 STL,std::vector:<uint64_t>:operator[] 怎么会有这样的性能差异
EASTL versus STL, how can there be such a performance difference in std::vector<uint64_t>::operator[]
根据http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.htmlvector<uint64>::operator[]
在EASTL中的速度比"常用的STL商业版本"快2%到70%。
除非STL的商业版本使用范围检查(这会使比较不公平),否则如此简单的操作怎么会有如此大的速度差异呢?
更新:
似乎答案是EA工程师只是通过与使用范围检查的版本进行比较来欺骗…
文档声明他们使用vc++ 2005进行Windows测试,默认情况下启用检查迭代器(是的,即使是发布版本;vc++ 2008也是一样)。我怀疑operator[]
的性能不会有任何不同,如果他们将-D_SECURE_SCL=0
添加到他们的构建命令行。
我认为文档中的这一段将是至关重要的
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html eastl_allocator
显然是受Pablo Halpern的著名文章"Towards a better allocator model"的启发
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 未达到的情况会影响开关外壳性能
- 不同版本的编译器(例如GCC)是否会产生不同的性能?
- 当相机接近模型时,SSAO样本内核会导致性能下降?
- 数组中的不同浮点值会影响性能 10 倍 - 为什么?
- 为 lambda 分配名称会影响性能吗?
- 缓冲区溢出怎么会成为黑客的攻击
- 每次我将(播放旋律 - )代码上传到Arduino时,我按下按钮时,它会在数组中跳过相同的音符.怎么会
- 当 epoll 发出活动信号时,recv() 调用怎么会阻塞
- Tcl_CreateInterp怎么会变成一个无限循环呢
- 声明大型 2D 数组怎么会让程序崩溃
- OpenCL - 我的数组怎么会太大而导致堆栈溢出
- 这个布尔运算符在C++中实际做了什么?这个奇怪的东西怎么会有用呢
- 一个从未执行过的代码中的一个小变化怎么会有什么不同呢
- c++:这怎么会是语义错误?
- 我不小心制造了一个病毒这怎么会是病毒
- C++内联在一个单例中被忽略,并显示在我的探查器中.怎么会
- 这段C++代码怎么会出现内存泄漏
- EASTL 与 STL,std::vector:<uint64_t>:operator[] 怎么会有这样的性能差异