2011-04-21 15 views
13

根據http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html vector<uint64>::operator[]是2%和70%在EASTL快於STL的「常用商業版本之間」。EASTL與STL,哪有在STD這樣的性能差異::矢量<uint64_t> ::操作符[]

除非商業版本的STL使用範圍檢查,這會使比較不公平,對於這樣一個簡單的操作,它怎麼可能是這樣的速度差異?

更新:

看來答案是,EA的工程師簡單地通過與使用範圍檢查的版本比較作弊......

回答

8

該文件聲明他們使用VC++ 2005進行Windows測試,其中checked iteratorsenabled by default(是的,即使是發佈版本; VC++ 2008也是如此)。如果他們將-D_SECURE_SCL=0添加到他們的構建命令行中,我懷疑operator[]的性能不會有任何不同。

+0

不會有什麼區別,因爲'vector <...> :: operator []'實現爲'{return(*(this - > _ Myfirst + _Pos)) ;}'即沒有迭代器參與。 – 2011-04-21 10:47:22

+0

@Viktor Sehr:這是'_SECURE_SCL'#''define'd爲'0'時執行的代碼。當'_SECURE_SCL' ='1'時,默認情況下,運行的代碼基本不同。 (另外請注意,VC++ 2010中的STL實現與VC++ 2005和2008中的STL實現大不相同,因此在這裏查看2010年的實現與此無關。) – ildjarn 2011-04-21 10:53:13

+0

VS2010怎麼樣? – 2011-04-23 19:00:42

4

我覺得從這個文檔通道將是至關重要的

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html#eastl_allocator

這顯然是由著名的啓發「走向一個更好的分配模式」巴勃羅·哈爾彭文章

+4

更好的分配器如何影響'operator []'? – sharptooth 2011-04-21 10:23:09

+2

顯然,它們的分配器考慮了對齊要求,這可能會使特定的訪問模式更快地訪問特定位置。然而,AFAICT的精確基準方法並未公佈(在同一頁上) – sehe 2011-04-21 10:26:27

相關問題