Eliminering av gränskontroll
Inom datavetenskap är eliminering av gränskontroll en kompilatoroptimering användbar i programmeringsspråk eller runtime-system som upprätthåller gränskontroll , praxis att kontrollera varje index i en array för att verifiera att indexet ligger inom det definierade giltiga indexintervallet. Dess mål är att upptäcka vilka av dessa indexeringsoperationer som inte behöver valideras vid körning och att eliminera dessa kontroller.
Ett vanligt exempel är att komma åt ett matriselement, modifiera det och lagra det modifierade värdet i samma matris på samma plats. Normalt skulle detta exempel resultera i en gränskontroll när elementet läses från arrayen och en andra gränskontroll när det modifierade elementet lagras med samma arrayindex. Eliminering av gränskontroll kan eliminera den andra kontrollen om kompilatorn eller körtiden kan fastställa att varken matrisstorleken eller indexet kan ändras mellan de två matrisoperationerna. Ett annat exempel inträffar när en programmerare går över elementen i arrayen, och loopvillkoret garanterar att indexet är inom gränserna för arrayen. Det kan vara svårt att upptäcka att programmerarens manuella kontroll gör den automatiska kontrollen överflödig. Det kan dock fortfarande vara möjligt för kompilatorn eller körtiden att utföra korrekt eliminering av gränskontroll i detta fall.
Genomföranden
På inhemska sammanställda språk
En teknik för eliminering av gränskontroll är att använda en typad statisk representation av en enda tilldelningsform och för varje array att skapa en ny typ som representerar ett säkert index för den specifika arrayen. Den första användningen av ett värde som ett arrayindex resulterar i en runtime typ cast (och lämplig kontroll), men därefter kan det säkra indexvärdet användas utan en typ cast, utan att offra korrekthet eller säkerhet.
På JIT-kompilerade språk
Just-in-time kompilerade språk som Java och C# kontrollerar ofta index vid körning innan de kommer åt arrayer . Vissa just-in-time kompilatorer som HotSpot kan eliminera en del av dessa kontroller om de upptäcker att indexet alltid är inom rätt intervall, eller om en tidigare kontroll redan skulle ha orsakat ett undantag.
externa länkar
- W. Amme, J. von Ronne, M. Franz. Använda SafeTSA-representationen för att öka prestandan hos en befintlig Java Virtual Machine ( 2002).