Какво е стека на повикване

След като имаше изявление Гото и програмата изглеждаше по следния начин

За да спрете по време на изпълнението (на точка на прекъсване или хвърли изключение), за да установите кои функции (а вероятно и няколко реда код) имаше спирка, с гнездене.


Call стека на изключение:

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

Програмист "си с кръстове", и не само

Call комин - това стека повикване, функцията хардуера на всички основни процесори.

Тук навлизаме в главната (функция). По това време, променливата Z появява в паметта. И тогава Foo () - там също е променлива база. И след това се оставя на Mt. - у изчезва. Това, което правим? Или в края добавите един или повече локални променливи, или с една и съща цел да ги изтриете. Каква е структурата на данните, подходящ за това? Stack: добавяне, изтриване, от края. Всичко това, изземване x86 изпълнява в хардуер, един сегмент, две регистри (ESP = 32-битова стека показалеца и ЕВР = 32-битова основа на показалеца) и няколко команди (лицеви, поп, да се обадите на задържане ...).

Местните променливи, които принадлежат към една и съща функция, наречена стек рамка. В същото време рамката на една функция може да бъде няколко, ако тя нарича себе си, било то пряко или косвено - като функция бар ().

Най-известният модел, можете да се обадите, "размотаване" комин кадър по кадър, за да видите какъв вид функция е причинил. Това се показва в прозореца Call Stack. Като достъп за отстраняване на грешки е много бавно, обикновено показва само върха на стека. Освен това, като посочи някъде на Call Stack, можем да видим местните променливи на потребителския модел на функция.

От комина на хардуер, тя не може да се разшири; само преди началото на точката на програмата / поток, колко памет е достатъчно за нас. И така, част от грешка "стека преливане" на.