Основните принципи на програмирането стека и купчина

Основните принципи на програмирането стека и купчина

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

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

Stack - това е област от паметта, която се създава за всяка нишка. Той работи за LIFO (Last In, First Out), т.е. последното парче добавя към паметта на стека ще бъдат първите на опашката за оттеглянето от купа. Всеки път, когато функцията декларира нова променлива, тя се добавя към стека, а когато променливата отпадне от обхвата на приложение (например, когато функцията завършва), той автоматично ще бъде изтрит от купчината. Когато променливата на стека е освободен, тази област на паметта е на разположение за други стека променливи.

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

В резултат на това стека ви позволява да управлявате памет по-ефективно - но ако трябва да използвате динамични структури от данни и глобални променливи, струва си да се обръща внимание на купчината.

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

В сравнение с купа, купа е по-бавен, защото променливите са разпръснати памет и не седят на върха на стека. Неправилно управление на паметта, купчина забавя неговото действие; Въпреки това, това не намалява неговото значение - ако трябва да се работи с динамични и глобални променливи, използвайте куп.

заключение

Значи вие се запознахте с концепциите за стека и куп. С една дума, на комина - това е много бърза памет за съхранение, работещ на принципа на LIFO и контролирани от процесора. Но тези предимства водят до ограничен размер на стека и метод за получаване на специални стойности. За да се избегнат тези ограничения, можете да използвате един куп - това ви позволява да създавате динамични и глобални променливи - но трябва да управлява с памет или събирач на боклука, или програмист, и един куп работи по-бавно.