Mengapa tumpukan runtime digunakan untuk alokasi memori dinamis dalam bahasa gaya-C dan struktur data keduanya disebut "tumpukan"? Apakah ada hubungannya?
Mengapa tumpukan runtime digunakan untuk alokasi memori dinamis dalam bahasa gaya-C dan struktur data keduanya disebut "tumpukan"? Apakah ada hubungannya?
Jawaban:
Donald Knuth berkata (The Art of Computer Programming, Third Ed., Vol. 1, hal. 435):
Beberapa penulis mulai sekitar tahun 1975 menyebut kumpulan memori yang tersedia sebagai "tumpukan."
Dia tidak mengatakan penulis mana dan tidak memberikan referensi ke makalah tertentu, tetapi mengatakan bahwa penggunaan istilah "tumpukan" dalam kaitannya dengan antrian prioritas adalah pengertian tradisional dari kata tersebut.
Mereka memiliki nama yang sama tetapi mereka benar-benar tidak mirip (bahkan secara konseptual). Tumpukan memori disebut tumpukan dengan cara yang sama Anda akan menyebut keranjang cucian sebagai "tumpukan pakaian". Nama ini digunakan untuk menunjukkan tempat yang agak berantakan di mana memori dapat dialokasikan dan dialokasikan sesuai keinginan. Struktur data (seperti yang ditunjukkan oleh tautan Wikipedia) sangat berbeda.
Tabrakan nama itu disayangkan, tetapi tidak semua yang misterius. Heap adalah kata kecil yang umum digunakan untuk tumpukan, kumpulan, grup, dll. Penggunaan kata untuk struktur data pra-tanggal (saya cukup yakin) nama kumpulan memori. Bahkan, kolam akan menjadi pilihan yang jauh lebih baik untuk yang terakhir, menurut pendapat saya. Heap berkonotasi struktur vertikal (seperti tumpukan), yang cocok dengan struktur data, tetapi tidak kumpulan memori. Kami tidak menganggap tumpukan kumpulan memori sebagai hierarki, sedangkan ide mendasar di balik struktur data adalah menjaga elemen terbesar di atas tumpukan (dan sub-tumpukan).
Tumpukan struktur data tanggal kembali ke pertengahan 60-an; menumpuk kumpulan memori, awal 70-an. Istilah heap (artinya kumpulan memori) digunakan setidaknya pada awal 1971 oleh Wijngaarden dalam diskusi tentang Algol.
Mungkin penggunaan heap paling awal sebagai struktur data ditemukan tujuh tahun sebelumnya di
Williams, JWJ 1964. "Algoritma 232 - Heapsort", Communications of the ACM 7 (6): 347-348
Sebenarnya, membaca tentang cara memori dialokasikan (lihat Blok Buddy ) mengingatkan saya pada tumpukan dalam struktur data.
IMO itu hanya kebetulan / kebetulan bahwa kedua hal yang sama sekali tidak berhubungan ini memiliki nama yang sama. Ini seperti grafik dan grafik .
Struktur data mirip tumpukan digunakan oleh algoritma untuk menemukan alokasi memori yang tersedia. Berikut ini adalah kutipan dari http://www.cprogramming.com/tutorial/virtual_memory_and_heaps.html .
Ketika
new
dipanggil, ia mulai mencari blok memori gratis yang sesuai dengan ukuran permintaan Anda. Misalkan blok memori seperti itu ditemukan, itu ditandai sebagai dicadangkan dan pointer ke lokasi itu dikembalikan. Ada beberapa algoritma untuk mencapai hal ini karena kompromi harus dilakukan antara pemindaian seluruh memori untuk menemukan blok bebas terkecil lebih besar dari ukuran objek Anda, atau mengembalikan yang pertama di mana memori yang dibutuhkan cocok. Untuk meningkatkan kecepatan mendapatkan blok memori, area memori yang bebas dan dicadangkan dipertahankan dalam struktur data yang mirip dengan pohon biner yang disebut heap.
Istilah sehari-hari menumpuk memori dan memori tumpukan tidak digunakan dalam standar C ++. Standar ini menggunakan penyimpanan statis, penyimpanan utas, penyimpanan otomatis, dan penyimpanan dinamis.
Lebih banyak dapat ditemukan di bagian Duration Penyimpanan standar.
Oleh karena itu, dari sudut pandang bahasa dan perpustakaan standar, tidak ada kebingungan.
Q. Apa itu heap? A. Tumpukan adalah kumpulan objek yang saling bertumpukan.
Jawaban untuk pertanyaan Anda: Memori tumpukan dan tumpukan biner menggunakan konsep yang sama seperti yang Anda tahu. Data disimpan dalam bentuk tumpukan di memori dalam urutan yang sama seperti yang ditulis dalam program sedangkan tumpukan biner adalah struktur data yang mengikuti konsep yang sama menyimpan data dalam cara yang dipesan dalam bentuk tumpukan (Data di atas dari yang lain). Biarkan saya tahu apa yang Anda pikirkan di bagian komentar.
Mungkin tumpukan memori pertama diimplementasikan dikelola oleh struktur tumpukan?