C99

Meer specifiek: Platform-onafhankelijk C programmeren met dankbaar gebruik makende van de C99 features zodat embedded platforms niet hoeven te leiden onder de beperkingen van MSVC? En dan met name de "struct member assignments" en "Variable Length Arrays".
Neem bijvoorbeeld de Ogg encoder, deze wordt niet in C99 geschreven, puur omdat de library dan niet meer te bouwen is met behulp van MSVC. Daardoor kun je geen VLA's op de stack aanmaken en moet je altijd malloc's (op de heap) doen. Alhoewel dit "werkt" komt de volgorde van allocatie en deallocatie niet volledig overeen komt met de programma-flow, hetgeen geheugen-fragmentatie nogal verergerd op embedded targets. Dingen met de lifetime van een functie wil je in verband met geheugenfragmentatie ook alloceren op de stack en niet op de heap. Daar wil je alleen de dingen alloceren die langer dan de functie gealloceerd moeten blijven.
Stel:
functie a heeft een "n" keer 4k nodig (1) voor bewerkingen binnen de functie, en moet daarnaast ook een buffer aanmaken van 16k (2) waarin het resultaat wordt weggeschreven. De functie wordt tot een bepaald niveau recursief aangeroepen:
Wat je wilt is:
=> functie a start
- maak n keer 4k aan op de stack (1)
- maak buffer aan van 16k aan op de heap die bewaard moet blijven buiten de functie (2)
- roep functie a recursief aan
- doe iets en schrijf weg naar buffer (2)
- dealloceer de eerste array (1)
<= return vanaf functie a (geef o.a. buffer (2) terug)
Zonder enige fragmentatie. Stel nu dat alles op de heap wordt gealloceerd en functie a recursief vier keer word aangeroepen, dan is na afloop dit de layout van de heap:
[gat van 2*4k]
[16k buffer functie a niveau 0]
[gat van 2*4k]
[16k buffer functie a niveau 1]
[gat van 2*4k]
[16k buffer functie a niveau 2]
[gat van 2*4k]
[16k buffer functie a niveau 3]
Niet meteen en zeker niet direct met allocaties van deze omvang, maar na verloop van tijd kan geheugen fragmentatie een behoorlijk probleem worden op een redelijk deel van de embedded systemen. Voor deze situatie zijn nu juist de VLA's geïntroduceerd!
War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic