Przekazuję kod C++ z systemu Linux do systemu Windows. W trakcie tego procesu okazało się, że następujący wiersz trwa ~ 10 razy wolniej pod Windows (na dokładnie tym samym sprzęcie):Windows vs. alokacja pamięci Linux/wydajność konstruktora std :: list
list<char*>* item = new list<char*>[160000];
W Windows trwa ~ 10ms, podczas gdy Linux zajmuje ~ 1ms. Zwróć uwagę, że jest to średni czas. Uruchomienie tego rzędu 100 razy zajmuje około 1 sekundy w systemie Windows.
Zdarza się to zarówno na win32, jak i na x64, obie wersje są kompilowane w Release, a prędkość jest mierzona za pomocą QueryPerformanceCounter (Windows) i gettimeofday (Linux).
Kompilator systemu Linux to gcc. Kompilatorem Windows jest VS2010.
Każdy pomysł, dlaczego tak się stało?
Widzę, jak wznosi się fala ognia ... tak czy inaczej prawdopodobnie powinieneś robić rzeczy w pętli, więc te liczby prawdopodobnie nie mają znaczenia nawet 10ms jest łatwo zakłócane przez inne rzeczy. mierzyć w ciągu kilku sekund. Ale nawet wtedy zgaduję, że trudny sposób przydzielania pamięci w systemie Windows jest wolniejszy. Po prostu pobaw się trochę i spraw, by był bardziej podobny do wzoru, którego używałbyś w swoim programie. – PlasmaHH
@EdHeal: naprawiliśmy maszynę czasu. możesz wrócić do 1998 roku i żyć tam szczęśliwie. –
@ssg nie jestem pewien. Po mojej stronie starałem się jak najlepiej mieć timer o rozdzielczości 5ms w Qt i nie można tego zrobić w Windows. – UmNyobe