seltsame Verlangsamung von C ++ Allocs

9

Könnte mir bitte jemand sagen, warum folgende Dinge passieren könnten:

Ich habe zwei Computer:

  1. meine Arbeit comp
  2. Server

Ich führe C ++ - Programm (msvc 2005 c ++ kompiliert), das nur auf Server zu langsam arbeitet, aber nicht auf meiner comp.

Ich habe Messungen durchgeführt (GetThreadTimes usw.) und könnte definitiv sagen, dass der enge Ort - seine Speicherzuteilung (neu / malloc) Und es passiert nur auf dem Server!

Ich könnte behaupten, dass es aufgrund von Speicherfragmentierung wegen passiert 1. Zeit-Server-Instanz des Programms funktioniert gut, es beginnt Zeit zu verlieren on allokiert erst nach dem erneuten Laden von Daten in den Speicher (1-1,5 Millionen Allocs / Frees).

Ich würde nicht so überrascht sein, wenn ich das gleiche Verhalten aufgrund des Gedächtnisses sehe Fragmentierung auf beiden Computern (mein Comp und Server) aber was ich sehe ist: 1). auf meiner Comp-Zuteilung nehmen ~ 5% der Zeit (nicht genau, aber so etwas) 2). auf dem Server dauert diese Zuteilung ~ 75% der Zeit

Wie kann das passieren? Was könnte C ++ - Zuordnungen auf Server-Computer verlangsamen, Inzwischen ist es OK für meine Arbeitsstation. Wo könnte der Unterschied sein? Wahrscheinlich ist es etwas mit Speichermanagementfunktionen auf OS-Ebene verbunden? weil der C ++ - Level-Manager in beiden Fällen gleich ist.

Hier sind beide Konfigurationen:

1). Mein Computer (wo Allocs ~ 5% benötigen):

%Vor%

2). Server (wo Zuweisungen ~ 75% beanspruchen):

%Vor%

Wird dankbar sein für die Klärung dieses Problems.

    
Andrew Lebedeff 05.04.2013, 16:01
quelle

1 Antwort

4

Das Problem könnte sein, dass die Speicherfunktionen nur einen Mutex verwenden, um den Speicher für die Zuweisung und Freigabe zu sperren.

    
Quonux 05.04.2013 16:14
quelle