Здравейте момчета,

Debadutta тук.

Добре дошли в моя първи технически блог. Така че нашата днешна предишна точка на дискусия е всичко за това как променливите използват пространството в паметта по време на изпълнение на програмата. някои хора просто обичат да кодират, разработват и изследват някои нови неща, докато други нямат много познания за ключовите концепции, като например как променливите се съхраняват и инициализират в коя част от сегмента на паметта. така че направих крачка напред, за да ви разберете за тези концепции, които смятам, че ще ви бъдат много полезни. Моята цел е да ви дам действителни и кратки познания за това как различните променливи използват структурата на паметта. Ето го

Преди да продължим напред, нека обсъдим някои основни концепции за променливите и паметта, така че нашата концепция да бъде ясна в края на този блог.

Какво е памет?

Паметта в компютъра е просто последователен набор от „кофи“, които могат да съдържат числа, знаци или булеви стойности. Като използваме няколко кофи подред, получаваме масиви. Като даваме имена на набор от съседни кофи, получаваме „структура“. Но в основата си компютърната памет е много прост списък от числа.

какво е променлива?

Променливите са имената, които давате на места в паметта на компютъра, които се използват за съхраняване на стойности в компютърна програма. Да приемем например, че искате да съхраните две стойности 10 и 20 във вашата програма и на по-късен етап искате да използвате тези две стойности.

Секция за видове памет

Има различни видове секции, които присъстват в паметта. Така че нека обсъдим накратко част от паметта и какво е значението на тези секции от паметта. Така че има 4 вида раздели на паметта, които се използват по време на изпълнение на програмата.

- Секция за текстови сегменти

- Раздел за сегмент от данни

- Раздел сегмент на стека

- Раздел Сегмент на купчина

Секция за текстови сегменти:-

Текстовият сегмент е частта от паметта, която присъства под секцията за глава и сегмент от данни, за да се предотврати презаписването на купища и препълване на стека. Текстовият сегмент е известен също като сегмент за кодиране или просто като текст и също така съдържа изпълнима инструкция. Текстовият сегмент може да се споделя, така че само едно копие трябва да бъде в паметта за често изпълнявани програми, като текстови редактори (като atom, визуално студио и т.н.), черупките и т.н. Освен това текстовият сегмент е само за четене, така че да може да се използва за предотвратяване на случайно модифициране на инструкциите на програма.

Нека го разберем на езика на неспециалистите, когато пишете някакъв код във вашия текстов редактор, като използвате такива инструменти като (atom, Visual Studio и т.н.), тогава кодът, който пишете, се съхранява в секцията за текстови сегменти. когато започнете да изпълнявате пълния код, тогава компилаторът прочита кода, разбираем за човека, и го преобразува в код, разбираем за машината, без да правите промени без никакво прекъсване. когато направите промени в кода си, това ще се отрази и в този раздел.

Секция за сегмент от данни:-

Разделът за сегменти от данни съдържа глобални променливи и статична променлива. Намира се под областта на стека и купчината на паметта.

Сегментът от данни е от два типа:

-Секция за инициализиран сегмент от данни

-неинициализиран сегмент от данни

Инициализиран сегмент от данни:-

И така, нека първо да поговорим за секцията за инициализирани сегменти от данни и нейното значение. Сегмент от данни е част от виртуалното адресно пространство на програма, която съдържа глобалните променливи и статичните променливи, които се инициализират от програмиста.

Сегментът с данни не е само за четене, тъй като стойностите на променливите могат да се променят по време на изпълнение.

Така че нека го разберем, като вземем пример.

Когато инициализирате произволен тип променлива, тя ще бъде създадена в областта на сегмента от данни, както създавате променлива int a=11 и отново по време на изпълнение, когато променим стойността й на т.е. 10, тогава тя ще бъде променена на новата си стойност 10 чрез презаписване на старата стойност на променливата 11.

Неинициализиран сегмент от данни:-

Неинициализиран сегмент от данни, често наричан сегмент „bss“, кръстен на древен асемблерен оператор, който означава „блок, започнат от символа“. Данните в този сегмент се инициализират от ядрото до аритметика 0, преди програмата да започне да се изпълнява

неинициализираните данни започват в края на сегмента с данни и съдържат всички глобални променливи и статични променливи, които са инициализирани до нула или нямат изрична инициализация в изходния код.

Така че помислете за условие, когато пишете програма и забравите да инициализирате променлива, тогава променливата се създава в областта на неинициализиран сегмент от данни, инициализирана със стойност по подразбиране нула (в повечето езици за програмиране променливата се инициализира с някаква ненужна стойност). например ако забравите да инициализирате променлива 'a' по време на изпълнение на програма, тя ще бъде създадена в неинициализирана област на сегмент от данни и инициализирана до нула.

Секция на стека:-

Стекът е специална област от паметта на компютъра, която съхранява временни променливи, създадени от функция. В стека променливите се декларират, съхраняват и инициализират по време на изпълнение. Това е памет за временно съхранение. Когато изчислителната задача приключи, паметта на променливата ще бъде автоматично изтрита.

Стековата памет е памет с фиксиран размер, която следва концепцията за FIFO, т.е. (First In First Out). Паметта на стека се използва за извиквания на функции като рекурсия и вложена функция. Процесът обикновено включва стека на процеса, който съдържа временни данни като функция, адрес за връщане и локална променлива.

Нека го разберем, като вземем пример за рекурсия. Мисля, че трябва да сте чували за този термин, известен като рекурсия.

какво е рекурсия

Рекурсията се отнася до извикване на самата функция директно или косвено.

Когато която и да е функция се извика от основната функция, паметта се разпределя за нея в секцията с памет на стека. Рекурсивна функция извиква сама себе си, паметта за извикана функция се разпределя върхупаметта, разпределена за извикващата функция и се създава различно копие на локални променливи за всяко извикване на функция. И съществуваща точка винаги е там в кода, в противен случай дава изключение по време на изпълнение, което е грешка при препълване на стека.

Групова секция:-

Купчината на паметта е място в паметта, където паметта може да бъде разпределена при произволен достъп. За разлика от стека, където паметта се разпределя и освобождава в много определен ред, отделните елементи от данни, разпределени в купчината, обикновено се освобождават по начини, които са асинхронни един спрямо друг.

Това е много важна концепция за тези, които се интересуват повече
от обектно-ориентиран език за програмиране, защото когато създаваме обект за клас в нашата програма, тогава обектът ще бъде създаден вътре в раздела на паметта на купчината и също така разпределя някои пространство, използващо динамично разпределение на масив (в което разпределяме произволно място в паметта на масива според размера на масива).

Ако горното съдържание е било малко полезно за вас по някакъв начин, моля, не забравяйте да го споделите с приятелите си. И винаги сте добре дошли да ме уведомите за всяка моя грешка в този блог.

И още нещо, ако искате да научите повече за операционната система и езика за програмиране, тогава силно ви препоръчвам да следвате тази връзка към книгата, дадена тук.

Нека се свържем с LinkedIn, Instagram, Facebook и GitHub

Благодаря ти

Debadutta panda 😊