Чому купу виконуваної динаміки використовують для динамічного розподілу пам'яті на мовах С-стилю, а структуру даних називають "кучкою"? Чи є якесь відношення?
Чому купу виконуваної динаміки використовують для динамічного розподілу пам'яті на мовах С-стилю, а структуру даних називають "кучкою"? Чи є якесь відношення?
Відповіді:
Дональд Кнут говорить (Мистецтво комп’ютерного програмування, Третя редакція, т. 1, стор. 435):
Кілька авторів почали близько 1975 року називати пул доступної пам'яті "купою".
Він не каже, хто з авторів і не посилається на якісь конкретні статті, але каже, що використання терміна "купа" стосовно пріоритетних черг є традиційним сенсом цього слова.
Вони мають одне ім’я, але вони насправді не схожі (навіть концептуально). Купа пам'яті називається купою так само, як ви б називали кошик для білизни як "купа одягу". Ця назва використовується для вказівки дещо безладного місця, де пам'ять може бути розподілена і розміщена за бажанням. Структура даних (як вказує посилання на Вікіпедію, на яку ви вказуєте посилання) зовсім інша.
Зіткнення імені прикро, але не все таємниче. Heap - це невелике загальне слово, яке використовується для позначення палі, колекції, групи тощо. Використання цього слова для структури даних заздалегідь датує (я майже впевнений) назву пулу пам'яті. Насправді, пул був би набагато кращим вибором для останнього, на мою думку. Купа означає вертикальну структуру (як ворс), яка відповідає структурі даних, але не пулу пам'яті. Ми не вважаємо, що купа пулу пам’яті є ієрархічною, тоді як основна ідея структури даних - це збереження найбільшого елемента на вершині купи (та підгруп).
Купа даних даних сягає середини 60-х років; купа пам'яті, початок 70-х. Термін купа (означає пул пам’яті) був використаний принаймні ще в 1971 році Війнгаардом в дискусіях про Алгола.
Можливо, найдавніше використання купи як структури даних було знайдено на сім років раніше в
Williams, JWJ 1964 р. "Алгоритм 232 - Heapsort", повідомлення ACM 7 (6): 347-348
Насправді, читання про те, як розподіляється пам’ять (див. Блоки Бдді ), нагадує про купу даних.
ІМО - це лише випадковість / збіг обставин, що ці дві абсолютно не пов'язані між собою речі мають однакову назву. Це як графік та графік .
Купова структура даних використовується алгоритмом пошуку доступного розподілу пам'яті. Далі викладено з http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .
Після
new
виклику він починає шукати безкоштовний блок пам'яті, який відповідає розміру вашого запиту. Припустимо, що такий блок пам'яті знайдено, він позначається як зарезервований і повертається вказівник на це місце. Для цього існує кілька алгоритмів, оскільки для сканування всієї пам'яті потрібно знайти компроміс для пошуку найменшого вільного блоку, що перевищує розмір об'єкта, або повернення першого, де потрібна пам'ять. Для підвищення швидкості отримання блоку пам’яті вільні та зарезервовані ділянки пам’яті підтримуються у структурі даних, подібній бінарним деревам, що називається купою.
Розмовні терміни стекають пам'ять та купують пам’ять у стандарті C ++. Стандарт використовує статичне зберігання, зберігання потоків, автоматичне зберігання та динамічне зберігання.
Більше можна знайти в розділі « Зберігання даних стандарту».
Отже, з точки зору мови та стандартної бібліотеки, не виникає плутанини.
З. Що таке купа? А. Куча - це сукупність предметів, розташованих один над одним.
Відповідь на ваше запитання: І купа пам’яті, і бінарна купа використовують те саме поняття, як і вам відомо. Дані зберігаються у вигляді купи в пам'яті в тому ж порядку, що і в програмі, тоді як двійкова купа - це структура даних, яка дотримується тієї ж концепції зберігання даних впорядкованому вигляді у вигляді купи (Дані зверху іншого). Дайте мені знати, що ви думаєте в розділі коментарів.
Можливо, першою реалізованою купою пам’яті керувала структура купи?