Zum Hauptinhalt Zur Navigation

Nur ein Festplattensektor: Diesem C-Compiler reichen 512 Byte Speicher

Viele Optimierungen machen den winzigen Compiler möglich. Einige Einschränkungen der Programmiersprache C sind allerdings erforderlich.
/ Johannes Hiltscher
10 Kommentare News folgen (öffnet im neuen Fenster)
Wer kleine Programme schreiben will, nutzt gern Assembler. (Bild: Johannes Hiltscher, Golem.de)
Wer kleine Programme schreiben will, nutzt gern Assembler. Bild: Johannes Hiltscher, Golem.de

Der Binärcode passt, als Base64 codiert, auf eine Visitenkarte: Sectorc ist vermutlich der kleinste je geschriebene C-Compiler. Sein Autor, der sich xorvoid nennt, hat den Code auf Github(öffnet im neuen Fenster) zur Verfügung gestellt und beschreibt die Entwicklung von Sectorc in seinem Blog(öffnet im neuen Fenster) . Begonnen hat xorvoid die Entwicklung nach der Analyse eines anderen Compilers, die ihn nach eigener Aussage auf viele interessante Ideen brachte.

Der Blogpost ist nicht nur amüsant geschrieben, er zeigt auch, was erforderlich ist, um mit so wenig Speicher auszukommen: Geschrieben ist Sectorc mit x86-16-Assembler, nutzt also nur die alten 16-Bit-Befehle der x86-Architektur . Viele davon kommen mit 2 Byte aus, zusätzlich ist der Code so organisiert, dass Sprünge maximal 128 Byte entfernt erfolgen - was wieder ein Byte spart. Ursprünglich sollte Sectorc einen speziellen C-Dialekt unterstützen, der eine eigenwillige Formatierung erfordert hätte.

Die Idee kam xorvoid, da er sich für die Umsetzung von Sectorc nach eigenen Angaben viele Anregungen bei Forth(öffnet im neuen Fenster) holte. Dessen Grammatik ist deutlich einfacher als die von C, was den sogenannten Lexer vereinfacht. Der zerlegt das zu übersetzende Programm in Tokens, die später zur Erzeugung des Maschinencodes verwendet werden. Dank der vielen Optimierungen reichte der Platz dann aber am Ende zumindest für die gewohnte C-Syntax.

Eingeschränkter Funktionsumfang

Dennoch schränkt Sectorc den Sprachumfang von C ein: Es werden nur 13 Operatoren unterstützt, auf Multiplikation, Division und Divisionsrest etwa müssen Programmierer verzichten. Auch for-Schleifen werden nicht unterstützt, Zeiger können nur mittels Sternoperator dereferenziert werden. Wer Fehlermeldungen möchte, muss ein zusätzliches Modul mit einbinden, dann überschreitet der Compiler allerdings die 512-Byte-Marke.

Als ernsthaftes Projekt für den Produktiveinsatz ist Sectorc nicht gedacht - der Compiler ist ein reines Hobbyprojekt, um auszuloten, was mit Optimierung möglich ist. Als weiteres Hobby gibt xorvoid übrigens "Langstreckenläufe mit Marathondistanz und mehr" an.


Relevante Themen