Компилятор теориясындағы псевдонимдерді талдау – жад орнына бірнеше жолмен қол жеткізуге болатынын анықтау. Ағынға және контекстке сезімталдік бойынша жіктеледі. SEO үшін оптимизацияланған.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Алиас талдау – компилятор теориясындағы әдіс, сақтау орнына бірнеше тәсілмен қол жеткізуге болатынын анықтау үшін қолданылады. Егер екі нұсқау бірдей орнға сілтесе, олар алиас деп аталады. Алиас талдау әдістері әдетте ағынға сезімталдығы және контекстке сезімталдығы бойынша жіктеледі. Олар мүмкін алиас немесе міндетті алиас туралы ақпаратты анықтай алады. "Алиас талдау" термині көбінесе "нұсқауларға сілтеме талдауымен" (points-to analysis) ауыстырып қолданылады, ол нақты жағдайды білдіреді. Алиас талдағыштары бағдарламалардағы алиасты түсіну үшін пайдалы ақпаратты жасау және есептеу мақсатында жұмыс істейді.
Alias analysis is a technique in compiler theory, used to determine if a storage location may be accessed in more than one way. Two pointers are said to be aliased if they point to the same location. Alias analysis techniques are usually classified by flow sensitivity and context sensitivity. They may determine may alias or must alias information. The term alias analysis is often used interchangeably with points to analysis, a specific case. Alias analysers intend to make and compute useful information for understanding aliasing in programs.
Атауларды талдау
Атауларды талдау кезінде бағдарлама жады атаулар кластарына бөлінеді. Атаулар кластары – бір-біріне сәйкес келе алмайтын орналасулардың бөлек жиындары. Бұл талқылау үшін, мұндағы оңтайландырулар бағдарламаның төмен деңгейлі аралық өрнегінде жүзеге асырылады деп есептеледі. Яғни, бағдарлама бинарлық операцияларға, секірулерге, регистрлер арасындағы жылжуларға, регистрлерден жадқа, жадтан регистрлерге жылжуларға, тармақтануларға және функцияны шақыру/қайтару операцияларына компиляцияланған.
In alias analysis, we divide the program's memory into alias classes. Alias classes are disjoint sets of locations that cannot alias to one another. For the discussion here, it is assumed that the optimizations done here occur on a low level intermediate representation of the program. This is to say that the program has been compiled into binary operations, jumps, moves between registers, moves from registers to memory, moves from memory to registers, branches, and function calls/returns.
Түрге негізделген псевдонимдер талдауы
Егер құрастырылатын тіл типтік қауіпсіз болса, компилятордың типті тексерушісі дұрыс болса және тілде жергілікті айнымалыларға сілтеме жасайтын көрсеткіштер жасау мүмкіндігі болмаса (мысалы, ML, Haskell немесе Java), онда бірнеше пайдалы оңтайландырулар жасалуы мүмкін. Көптеген жағдайларда екі жад орны әртүрлі псевдоним кластарында болуы керек екенін білеміз:
If the language being compiled is type safe, the compiler's type checker is correct, and the language lacks the ability to create pointers referencing local variables, (such as ML, Haskell, or Java) then some useful optimizations can be made. There are many cases where we know that two memory locations must be in different alias classes:
Әртүрлі типтегі екі айнымалы бірдей псевдоним класында бола алмайды, себебі бұл қасиет қатты типтелген, жадқа сілтеме жасаудан бос (яғни жад орнына жасалған сілтемелерді тікелей өзгертуге болмайды) тілдерге тән. Әртүрлі типтегі екі айнымалы бір уақытта бір жад орнын бөлісе алмайды. Ағымдағы стек фрейміне жергілікті жад бөлулер ешқандай алдыңғы стек фреймінен бөлінген жад бөлулермен бірдей псевдоним класында бола алмайды. Бұл жағдай, жаңа жад бөлулер барлық басқа жад бөлулерден бөлек болуы керек болғандықтан туындайды. Әдетте, әрбір жазба түрінің әрбір өрісінің өзінің псевдоним класы болады, себебі типтеу ережесі көбінесе бірдей типтегі жазбалардың ғана псевдоним болуына рұқсат береді. Бір типтегі барлық жазбалар жадыда бірдей форматта сақталады, сондықтан өріс тек өзіне ғана псевдоним болуы мүмкін. Сол сияқты, әрбір белгілі бір типтегі массивтің өзінің псевдоним класы болады. Кодты псевдонимдерге талдағанда, жадқа әрбір жүктеу және сақтау операциясы оның класымен белгіленуі керек. Егер жад орындары және олардың псевдоним кластары берілген болса, онда псевдоним болуы мүмкін, ал егер псевдонимдер болмаса, онда жад орындары псевдоним болмайды – бұл пайдалы қасиет.
Two variables of different types cannot be in the same alias class since it is a property of strongly typed, memory reference free (i. e., references to memory locations cannot be changed directly) languages that two variables of different types cannot share the same memory location simultaneously. Allocations local to the current stack frame cannot be in the same alias class as any previous allocation from another stack frame. This is the case because new memory allocations must be disjoint from all other memory allocations. Each record field of each record type has its own alias class, in general, because the typing discipline usually only allows for records of the same type to alias. Since all records of a type will be stored in an identical format in memory, a field can only alias to itself. Similarly, each array of a given type has its own alias class. When performing alias analysis for code, every load and store to memory needs to be labeled with its class. We then have the useful property, given memory locations and with alias classes, that if then may alias , and if then the memory locations will not alias.
Ағынды негіздегі атаулар талдауы
Ағынға негізделген талдау, сілтемелер немесе типтік түрлендірулерді қолданатын тілдегі бағдарламаларға қолданылуы мүмкін. Ағынға негізделген талдау, типтік талдаудың орнына немесе оны толықтыру үшін пайдаланылуы мүмкін. Ағынға негізделген талдау кезінде, әрбір жадқа бөлінген орын үшін және адресі қолданылған әрбір жаһандық және жергілікті айнымалы үшін жаңа псевдоним кластары жасалады. Сілтемелер уақыт өте келе бірнеше мәнге нұсқауы мүмкін, сондықтан бірнеше псевдоним класында болуы мүмкін. Бұл әрбір жад орны үшін бір псевдоним класының орнына псевдоним кластары жиынтығы бар екенін білдіреді.
Analysis based on flow, can be applied to programs in a language with references or type casting. Flow based analysis can be used in lieu of or to supplement type based analysis. In flow based analysis, new alias classes are created for each memory allocation, and for every global and local variable whose address has been used. References may point to more than one value over time and thus may be in more than one alias class. This means that each memory location has a set of alias classes instead of a single alias class.