Benutze momentan ausschließlich statischen Speicher (bzw. einen Vector, welcher aber nur einmalig alloziiert wird), deshalb denke ich nicht, dass dieser enorme Boost mit geringerer Speicherfragmentierung zu erklären ist.
Spezialinstruktionen kann ich ebenfalls zu 99% ausschließen. Sah auf den ersten Blick in IDA zumindest alles recht ähnlich aus und die selben AVX Instructions, die ich bei der 64 Bit Version finden konnte, existierten meistens auch beim 32 Bit Kompilat.
Hatte den Verdacht, dass es daran liegt, dass ich viele 64 bit Integer verwende (auch unter 32 Bit), aber laut Stackoverflow macht das von der Performance her keinen allzu drastischen unterschied (Addition war glaube ich 2 statt 1 Instruktion, etc).
Die einzigen zwei Dinge, die mir noch in den Sinn kamen, sind:
- die effizientere Callingconvention unter 64 Bit
- die zusätzlichen 8 General-Purpose Register unter 64 bit
Bloß lese ich überall, dass man bei 64 Bit Kompilaten mit ca. 2-20% Performancezuwachs rechnen kann. In meinem Fall sind es halt über 90%, weshalb ich mir irgendwie Gedanken mache unter 32 Bit auf gut Deutsch irgendwas verkackt zu haben.
Der Profiler von VS2013 kann mir leider auch keinen genaueren Einblick verschaffen. Der prozentuale Anteil der einzelnen Funktionen ist bei beiden Kompilaten in etwa gleich. Der einzige Unterschied ist wirklich, dass die Ausführung der Methoden unter 32 bit signifikant länger dauert.