Алијас (рачунарство)У рачунарству, алијас описује ситуацију у којој се локацији података у рачунарској меморији може приступити преко различитих симболичких имена у програму. Тако, модификовање података путем једног имена имплицитно мења вредности у вези са свим алијас именима. Као резултат тога, алијас се чини посебно тешким за разумевање, анализирање и оптимизацију програма. Анализатори алијаса који се баве алијасом намеравају да израчунају и корисне информације за разумевање алијаса у програмима. ПримериПровера граница низаНа пример, C (програмски језик) (чита се: "це" - C је латинично слово) не обавља проверу граница низа. Тада може да се искористи спровођење програмског језика од стране компајлера и конвенција компјутерског језика како би се постигао ефекат алијаса. Ако се низ креира на стек, са променљивом изложеном у меморији директно поред тог низа, онда може да се индексира изван низа и директно промени променљиву променом релевантног елемента низа. На пример, ако имамо низ целих бројева величине 2(назовимо га arr), поред друге целобројне променљиве (зовимо је i), онда arr[2] (то је трећи елемент низа) биће алијас од i ако су суседни у меморији. #include <stdio.h>
int main()
{
int arr[2] = { 1, 2 };
int i=10;
/* i постаје алијас од arr[2]. */
arr[2] = 20;
printf("element 0: %d \t", arr[0]); // излази 1
printf("element 1: %d \t", arr[1]); // излази 2
printf("element 2: %d \t", arr[2]); // излази 20
printf("i: %d \t\t", i); // ће такође изаћи 20, не 10, због алијаса
/* arr величина је још увек 2. */
printf("arr величина: %d \n", (sizeof(arr) / sizeof(int)));
}
То је могуће у неким имплементацијама С програмског језика (чита се: "це" - C је латинично слово) , јер низ је блок целовите меморије, а елементи низа су само референце поравнања са адресе почетка тог блока помноженог величином једног елемента. Пошто, С програмски језик (чита се: "це" - C је латинично слово)нема проверу граница, индексирање и адресирање изван низа је могуће. Имајте на уму да је поменуто понашање алијаса недефинисано понашање. Неке имплементације могу оставити простор између низова и променљивих на стек, на пример, да се ускладе променљиве на меморијским локацијама које су вишеструке архитектуре на матерњим величинама речи компјутерске архитектуре . С (чита се: "це" - C је латинично слово) стандард не прецизира како су генерално подаци изложени у меморији. (ISO/IEC 9899:1999, section 6.2.6.1). Није погрешно да компајлер изостави алијас ефекат за приступе који спадају ван граница низа. Показивач алијасаЈош један низ алијаса се може јавити у било ком језику који се односи на једну локацију у меморији са више од једног имена ( на пример показивачи). Видите С пример xor swap алгоритма који је функција; претпоставља да се два показивача која су прошла, разликују, али ако су у ствари једнаки (или алијаси међусобно), функција не ради. Ово је заједнички проблем са функцијама које прихватају показивач аргумената, а њихова толеранција (или недостатак истог) за алијас мора бити пажљиво документована, посебно за функције које обављају сложене манипулације на меморијској области на њима. Одређени алијасКонтролисано алијас понашање може бити пожељно у неким случајевима (а то је, алијас понашање које је наведено, за разлику омогућеног распореда меморије у С програмском језику). То је уобичајена пракса у Фортрану.Перл програмски језик прецизира, у неким конструкцијама, алијас понашање, као што је у петљи за сваког. Ово омогућава да се одређене структуре података мењају директно са мање кода. На пример: my @array = (1, 2, 3);
foreach my $element (@array) {
# Повећање $element, према томе аутоматски
# додаје @array, зато што $element је ''алијас''
# за сваки @array елемент у заузврат.
$element++;
}
print "@array \n";
ће одштампати "2 3 4" као резултат. Ако неко жели да заобиђе алијас ефекат, онда би се могао копирати садржај индекса променљиве у другу и промениће копију. Сукоб са оптимизацијомОптимајзери често морају да праве конзервативне претпоставке о варијаблама у присуству показивача. На пример, знајући вредност променљиве (као што Друга оптимизација под утицајем алијаса је поновљени код. Ако компајлер одлучи да Да би се омогућиле такве оптимизације на предвидив начин,ИСО стандард за С програмски језик (укључујући новије С99 издање) прецизира да је то илегално (са неким изузецима) за показиваче различитих типова да се односе на исту локацију меморије. Ово правило, познато као стриктно алијас правило некад дозвољава импресивна повећања у перформанси,[1] али је познато да руши друге валидне кодове. Неколико софтверских пројеката намерно крше овај део C99 стандарда. На пример, Python 2.x је радио то да би спровео референтно рачунање,[2] и захтевао је промене у основним објектима у Python 3 како би омогућио ову оптимизацију. Линукс ради ово зато што стриктни алијас прави проблеме са оптимизацијом ванлинијског кода.[3] У оваквим случајевима када се компајлује са ГНУ колекцијом компајлера , опција Алијас хардвераПојам алијас се такође користи да опише ситуације где, услед иѕбора дизајна хардвера или грешке хардвера, једна или више слободних адреса битова се не користи у процесу селекције меморије.[4] Ово би могла бити одлука дизајна ако постоји више адреса битова слободних него што је неопходно како би пружили подршку инсталираној меморији уређаја. У недостатку, један или више адреса битова би могла бити скраћена заједно или би морала бити приморана да се скрати до краја(logic 0) или да снабдева волтажу (logic 1). Пример: За овај пример, претпостаљамо дизајн меморије са 8 локација, које захтевају само 3 адресе линија (или битова пошто је 23=8). Адресе битова (назване А2 до А0) су декодиране да одаберу јединствене локације меморије као што следи, у стандардном бинарном бројачу:
У табели изнад, свака од 8 јединствених комбинација адреса битова одабира различиту локацију у меморији. Међутим, ако једна адреса бита (А2) мора бити скраћена до краја, табела би била промењена као у приложеном наставку:
У овом случају, када је А2 једнако 0, прве четири локације у меморији су дуплиране и појављују се поново као и последњих четири. Локације у меморији од 4 до 7 су постале недоступне. Ако се ова промена деси другој адреси бита, резултат декодирања ће бити другачији, али ће ефекат генерално бити исти: губитак једне адрсе бита одсеца доступну меморију у половини, са резултирајућим дупликацијама (алијас) од преосталог простора. Види још
Референце
Спољашње везе
|
Portal di Ensiklopedia Dunia