ПредишенСледващото

@voipp: Аз не мисля, че информацията, която се чете е вярно. Както правилно отбеляза @DreamChild и комин, и хип - не повече от инструменти. Фактът, че топчето е по-малко от размера на купчина обикновено не означава нищо: можете да получите достъп до данните на местно и нелокални стека hipe. (Може би имахте предвид кеширане на ниво процесор, но тя не работи, както си мислиш.) Регистрира на езици от високо ниво, не е и никога няма да бъде, по много причини (например, защото компилаторът оптимизиране може да се оптимизира по-добър човек.) - VladD 05 декември '13 в 11:48

  1. И стека и купчина са както физически, така в RAM (не разгледа архитектурните размествания използване спец. Преработватели / компютри)
  2. Техният размер и местонахождение, се определя от оста
  3. В тази купчина той може да бъде фрагментирана (понякога доста силно). Обикновено оси са специални процедури за дефрагментиране на куп.
  4. Стек обикновено никога фрагментирана (Предполагам, че можеш да се сетиш за прилагане на купчина с фрагментация, но това е оксиморон).
  5. Стек, тъй като бързо, защото това е единственият вариант, с който работите - това е позицията на показалеца на стека (обикновено случай) - така че всички операции стека работят много по-бързо, отколкото една купчина. Работа на извличане стека / запис е един жест POP / PUSH процесор
  6. С куп трудно, поради простото действие и фрагментация извличане на стойността им може да доведе до десетки (и дори стотици) движения процесор.
  7. Против стека поради малките си размери (тя винаги е сравняван с един куп пъти по-малко) - така, че достъпът до него е напълно логично.

Отговорено 6 '13 декември в 18:47

@Barmaley: 6) Логично е да разпредели памет на куп, но ако имате указател към обект на куп, и указател към обект в стека, високоскоростен достъп до строго идентични. 7) Отново достъп се осъществява не съответства четене и сочен показалеца. - VladD 06 Дек '13 в 20:15

Наистина, скоростта на достъп до данни в стека и купчината същото. Т.е. Предмети 5) и 6) е грешка. Не бях мързелив и проверява времето на запълване (няколко опита), масив от 2 милиона. Int (повече в стека аз не се вписва) в купчината и комина. невалидни пълнене (Int на [], Int п) Този метод е избран за свеждане до минимум на въздействието на кеш паметта и то предварително извличане на. Резултати (clock_gettime (CLOCK_THREAD_CPUTIME_ID, TS);) ./a.out 100 стека: Ср: 43,332 (мсек) купчина: Ср: 42,283 (мсек) - AVP 06 декември '13 22:14

@avp ние не трябва да се опитаме да е необходимо да се гарантира, че един куп фрагментиран - за тази цел е необходимо да се направи облака случайно разпределение на различни размери, а също и на случаен принцип ги отстрани, само след проверка на скоростта на достъп до голям масив на куп (!). В противен случай, ако на куп не е фрагментирана скорост разбира се ще бъде същото. - Barmaley 8 декември '13 в 18:47

Въпреки, че много време е минало, откакто сте зададе въпроса, бих искал да отговоря, тъй като този въпрос е все още "Google" и мисля, че много повече ще посетете тази страница.

Както вече отговорили с "физически" - това е транзистори и кондензатори. Така че въпросът е бил повдигнат вероятно не е напълно вярно. Може би искаш да кажеш нещо подобно - ". Когато има един куп купчина и начина им на работа"

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

Ето един пример от организацията на сегмента на паметта.

Представяне на купчина и стек - преливане комин на Руски

Това е кратък и малко за виртуална памет на физическото представяне.

По отношение на устройството с памет в рамките на процеса:

Представяне на купчина и стек - преливане комин на Руски

КОД се съхранява в устройството, както и много други неща, които могат да се учат от мен Препоръчайте този материал в отговора.

По-добре е да се каже така. Типични операции на паметта са разпределени средства / освобождаване и четене / запис. заделяне на памет и операции deallocation движат по-бавно в купчина.

Ако, например, ние започваме указател към данните, лежащи в една купчина, разликата в скоростта на достъп е абсолютно никакъв.

Отговорено 7 '13 декември в 06:11

"Достъп до данни (четене / запис) е почти една и съща скорост," И ако данните са разпокъсани, не се забави тяхното четене? - voipp 07 Декември '13 в 11:14

@voipp: Какво означава "данни е фрагментирана?" Ако говорим за раздробяването на масива, а след това не се случи, на масива винаги отива направо. Ако става дума за лечение на различни обекти, те могат да бъдат разделени в паметта и местоположението им в стека и куп. - VladD 07 Декември '13 в 11:57

Да, аз подкрепям @VladD. Структурата също така не може да бъде фрагментирана. Ако имате куп структура с STD :: низ, съдържанието на линията, обикновено - в купчина :). По-скоро, че е необходимо да се мисли за структурите от данни, които трябва да се използват, а не тяхното местоположение. Списъкът, например, понякога може да бъде по-добре, отколкото на масива, но е склонен към фрагментиране (и повече разходи за памет). - Майкъл M 08 Декември '13 в 09:01

Свързани статии

Подкрепете проекта - споделете линка, благодаря!