2016-07-11 11 views
1

Ich verwende IAR als Compiler für eingebettetes Projekt. Ich versuche, einige Vorlagen für grundlegende Typen wie Liste einzuführen, aber jedes erstellte STL-Listenobjekt erhöht die Code-Größe um etwa 200 Bytes relativ zu unserer aktuellen C-Stil-Implementierung. Ich versuchte, einen kleinen Teil der STL-Liste selbst zu implementieren, in der Hoffnung, einen kleineren Code Fußabdruck zu bekommen, aber am Ende war es schwerer als die vollständige STL-Liste. Mache ich etwas schrecklich falsch in meiner Verwendung von Vorlagen?Warum benötigt diese Listenimplementierung mehr Platz als die Liste?

Dank

P. S. Bitte beachten Sie, dass der Code noch nicht getestet wurde und möglicherweise Drachen enthält.

+0

Ich bin mir nicht sicher, ob ich dir folge. Wie wird das Hinzufügen von mehr Code zu meiner Implementierung den Code-Footprint reduzieren? Ich habe die grundlegenden Methoden erst einmal für Testzwecke implementiert. – shayst

+0

Sprechen Sie über die Codegröße oder Laufzeitgröße der Listendatenstruktur? – Arunmu

+0

Zum einen konstruieren Sie standardmäßig ein 'T' und ordnen es dann zu. Das könnte zu etwas anderem führen. Sie sollten Placement new oder zumindest einen sinnvollen Konstruktor für Ihre 'LinkListElement'-Struktur verwenden. –

Antwort

3

Sie Code hat alle Arten von Funktionen und prüft, dass die STL nicht hat. Es macht also Sinn, dass Sie mehr Code erhalten.

Ja, die STL hat viele Funktionen, die Ihr Code nicht hat. Aber Sie verwenden keine von ihnen, so dass sie nicht in Ihrem Code-Footprint angezeigt werden. Die STL wurde mithilfe von Vorlagen entwickelt, damit Sie nicht für das bezahlen, was Sie nicht verwenden.

Es ist unwahrscheinlich, dass Sie die STL verbessern können. Wenn Sie Funktionen hinzufügen müssen, fügen Sie sie hinzu. Sie müssen das Rad nicht neu erfinden.

+0

Sie sagen also nur eine Liste eines Int-Objekts durch Vorlage vs einen spezialisierten Code zu erstellen, um Link-Liste mit Zeigern zu behandeln wird sich um etwa 200 Bytes unterscheiden? Ist das der Mindestpreis für Vorlagen? – shayst

+0

Nein, die Vorlagen sind (wahrscheinlich) kostenlos. Es sind all Ihre zusätzlichen Schecks, die Sie kosten. (Das ist der Grund, warum die STL so gut funktioniert. Weil sie Templates verwendet, bezahlen Sie nicht für das, was Sie nicht verwenden.) Sie haben auch viele kleine Probleme, siehe meine Kommentare über die Verwendung von Placement new oder dem Konstruieren des inneren Objekte richtig. –

+0

Ich werde umformulieren. Wenn ich die C-Stil-Liste nehme und sie mit der STL-Vorlage eins zu eins neu erstelle, bekomme ich einen erhöhten Code-Footprint von etwa 200 Bytes. Ohne irgendwelche Schnickschnack zu benutzen. Nur die sehr einfache Push, Pop, Front, Back, End() begin() Iterator ++ und Iterator == (oder! =) – shayst

Verwandte Themen