De flesta programmeringsspråk stöder en call stack i programmeringsmodellen och även i runtime systemet. Vi visar att för applikationer som riktar sig till inbäddade mikrokontroller med låg effekt (MCUs) kan RAM-användning minskas avsevärt genom att helt eller delvis eliminera startsignalen. Vi presenterar tillplattande, en omvandling som absorberar en funktion till sin anropare, ersätter funktion anrop och återvänder med hopp. Till skillnad från inlines, tillplatta inte duplicerar kroppar av funktioner som har flera callites. Tillämpas aggressivt, tillplattande resulterar i stack eliminering. Plattning är mest användbart i samband med en lyftomvandling som flyttar globala variabler in i en lokal omfattning. Plattning och lyft kan spara RAM. Men ännu större nytta kan uppnås genom att man anpassar kompilatorn för att klara av egenskaper hos tillplattad kod. Först visar vi att platta lägga falska vägar som förvirrar en standard levande variabler analys. De resulterande problemen kan lindras genom att bryta falska live-range konflikter mellan variabler med hjälp av information från den ouppblåsta anropsgrafen. För det andra visar vi att effekten av högt registertryck på grund av tillplattad och lyft kod, och därmed spill ut ur registret allocator, kan lindras genom att förbättra en kompilator stack layout optimeringar. Vi har genomfört båda dessa förbättringar i GCC, och har genomfört platta och lyft som käll-till-källa omvandlingar. På en samling applikationer för AVR-familjen på 8-bitars MCUs visar vi att total RAM-användning kan minskas med 20% genom att sammanställa tillplattade och upplyfta program med vår förbättrade GCC.
Yang m.fl. Föreslagna och genomförda en "lyftande" omvandling för att flytta globala variabler till huvuds lokala räckvidd REF.
Eliminating the call stack to save RAM
{'venue': "LCTES '09", 'journal': None, 'mag_field_of_study': ['Computer Science']}