Según http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html vector<uint64>::operator[]
es entre 2% y 70% más rápido en EASTL que una "versión comercial comúnmente usada de STL ".EASTL frente STL, ¿cómo puede haber una diferencia de rendimiento en std :: vector <uint64_t> :: operador []
A menos que la versión comercial de STL utilice la comprobación de rango, lo que haría la comparación injusta, ¿cómo puede ser una diferencia de velocidad tan alta para una operación tan simple?
Actualización:
parece que la respuesta es que los ingenieros de EA es simplemente engañando mediante la comparación con una versión que utiliza la verificación del rango ...
no haría la diferencia ya que 'vector <...> :: operator []' se implementa como '{return (* (this -> _ Myfirst + _Pos)) ;} 'es decir, no hay iteradores involucrados. –
@Viktor Sehr: Ese es el código que se ejecuta cuando '_SECURE_SCL' es' # define'd a '0'. Cuando '_SECURE_SCL' =' 1', como es el predeterminado, se ejecuta un código sustancialmente diferente. (También tenga en cuenta que la implementación de STL en VC++ 2010 es muy diferente a la de VC++ 2005 y 2008, por lo que mirar la implementación de 2010 no es relevante aquí.) – ildjarn
¿Qué pasa con VS2010? –