Estoy portando código C++ de Linux a Windows. Durante este proceso, descubrí que la siguiente línea se ~ 10 veces más lento en Windows (en exactamente el mismo hardware):Asignación de memoria de Windows vs. Linux/std :: lista, rendimiento del constructor
list<char*>* item = new list<char*>[160000];
En Windows se tarda ~ 10 ms, mientras que en Linux se necesita ~ 1 ms. Tenga en cuenta que este es el tiempo promedio. Ejecutar esta fila 100 veces lleva ~ 1 segundo en Windows.
Esto ocurre tanto en win32 como en x64, ambas versiones están compiladas en Release, y la velocidad se mide a través de QueryPerformanceCounter (Windows) y gettimeofday (Linux).
El compilador de Linux es gcc. El compilador de Windows es VS2010.
¿Alguna idea de por qué podría suceder esto?
Veo un aumento de flamewar ... de todos modos, probablemente debería hacer cosas en un ciclo más o menos, estos números probablemente no signifiquen tanto como 10 ms es fácilmente perturbado por otras cosas que suceden. medir en la cantidad de unos pocos segundos al menos. Pero incluso entonces, supongo que la forma predeterminada de asignar memoria en Windows es más lenta. Solo juega un poco y haz que se parezca más a un patrón que usarías en tu programa. – PlasmaHH
@EdHeal: arreglamos la máquina del tiempo. ahora puedes viajar a 1998 y vivir felizmente allí. –
@ssg no estoy seguro. Por mi parte, hice mi mejor esfuerzo para tener un temporizador de resolución de 5ms en Qt y no hay forma de hacerlo en Windows. – UmNyobe