Was ist schneller: Stack-Allokation oder Heap-Zuweisung

Diese Frage klingt ziemlich elementar, aber dies ist eine Debatte, die ich hatte, mit einem anderen Entwickler mit denen ich arbeite.

Ich kümmerte mich um Sie zu stapeln zuordnen, Dinge, wo ich könnte, stattdessen heap-Aufteilung. Er Sprach zu mir und gucken mir über die Schulter und bemerkte, dass es nicht nötig war, weil Sie die gleiche Leistung Weise.

Ich hatte immer den Eindruck, dass wachsende Stapel lief konstanter Zeit, und heap-Allokation ist die Leistung abhängig von der aktuellen Komplexität von heap für Zuweisung (Suche nach ein Loch der richtigen Größe) und de-Zuteilung (Einstürzende Löcher, die Fragmentierung zu verringern, da viele standard-Bibliothek Implementierungen nehmen Sie sich Zeit, dies zu tun, während löscht, wenn ich mich nicht Irre).

Dies erscheint mir als etwas, das wäre wahrscheinlich sehr compiler-abhängig. Für dieses Projekt insbesondere bin ich mit einem Metrowerks compiler für die PPC Architektur. Einblick auf diese Kombination wäre sehr hilfreich, aber im Allgemeinen, für GCC und MSVC++, was ist der Fall? Ist heap-Zuweisung nicht so performant wie stack-Zuweisung? Gibt es da keinen Unterschied? Oder sind die Unterschiede so winzig es wird sinnlos Mikro-Optimierung.

Ich weiß, das ist ziemlich alte, aber es wäre schön zu sehen, einige C/C++ - Schnipsel demonstriert die verschiedenen Arten der Zuweisung.
Ihre cow-orker ist schrecklich unwissend, aber noch wichtiger ist, er ist gefährlich, weil er macht, autoritative Behauptungen über die Dinge, die er furchtbar unwissend über. Verbrauchsteuern solche Leute aus Ihrem team so schnell wie möglich.
Beachten Sie, dass der heap ist in der Regel viel größer als der stack. Wenn Sie zugeteilt sind, große Mengen von Daten, die Sie wirklich haben, um es über den Haufen, sonst ändern Sie die stack-Größe, die aus der OS.
Alle Optimierungen sind, es sei denn, Sie haben benchmarks oder Komplexität Argumente, die beweisen, ansonsten, standardmäßig sinnlos micro-Optimierungen.
Ich Frage mich, ob Ihr Mitarbeiter hat meist Java oder C# Erfahrung. In jenen Sprachen, fast alles wird auf dem heap zugewiesen unter der Haube, die könnte führen zu solchen Annahmen.

InformationsquelleAutor Adam | 2008-10-02

Schreibe einen Kommentar