Alokasi dinamis dengan new/delete
dikatakan berlangsung di penyimpanan gratis ,
sementara malloc/free
operasi menggunakan heap .
Saya ingin tahu apakah ada perbedaan yang sebenarnya, dalam praktiknya.
Apakah penyusun membuat perbedaan antara kedua istilah tersebut? ( Toko gratis dan Heap , bukan new/malloc
)
sumber
Untuk C ++, perbedaan antara penyimpanan gratis dan heap telah menjadi sepenuhnya konseptual. Seperti kendi untuk mengumpulkan serangga, dan satu lagi untuk mengumpulkan kue. Yang satu diberi label dengan satu cara, yang lainnya dengan yang lain. Penunjukan ini dimaksudkan untuk menunjukkan titik di mana Anda TIDAK PERNAH mencampur "
new
" dan "delete
" dengan "malloc
", "realloc
", atau "free
" (atau kumpulan level bit dalam hal ini).Selama wawancara, ada baiknya untuk mengatakan bahwa "
new
dandelete
gunakan penyimpanan gratis,malloc
danfree
gunakan heap;new
dandelete
panggil konstruktor dan destruktor, bagaimanapunmalloc
danfree
tidak." Namun, Anda akan sering mendengar bahwa segmen memori benar-benar berada di area yang sama - namun, bahwa BISA khusus untuk kompiler, artinya, keduanya dapat menetapkan ruang memori yang berbeda sebagai kumpulan (tidak yakin mengapa, meskipun).sumber
Jawaban Mike Koval mencakup teori itu dengan cukup baik. Dalam praktiknya, bagaimanapun, mereka hampir selalu merupakan region memori yang sama - dalam banyak kasus jika Anda menggali implementasi compiler
new
, Anda akan menemukannya memanggilmalloc()
.Dengan kata lain: dari sudut pandang mesin, heap dan penyimpanan gratis adalah hal yang sama. Perbedaannya ada di dalam kompiler.
Untuk membuat segalanya semakin membingungkan, sebelum munculnya C ++ kami mengatakan "heap" yang berarti apa yang sekarang disebut "toko gratis".
sumber
Istilah "heap" juga dapat merujuk pada struktur data tertentu, tetapi dalam konteks C ++ malloc, operasi free, new, dan delete, istilah "heap" dan "free store" digunakan lebih atau kurang secara bergantian.
sumber
Heap dan toko gratis seharusnya tidak dapat dioperasikan. Dalam konteks terbatas seperti pada pengontrol mikro AVR 8-bit dengan C ++ 11 Standard Library, mereka bahkan tidak dapat digunakan dalam program yang sama. Penyimpanan gratis dan heap melakukan alokasinya dalam ruang memori yang sama, saling menimpa struktur dan data. Dalam konteks ini, penyimpanan Gratis berbeda dan tidak kompatibel dengan Heap karena "perpustakaan toko baru / hapus gratis" lebih sederhana (dan lebih cepat) daripada "perpustakaan tumpukan Malloc / gratis / realoc / calloc" dan dengan demikian memberikan keuntungan penggunaan memori yang besar ke Pemrogram tertanam C ++ (dalam konteks di mana Anda hanya memiliki 512 byte RAM).
Lihat 8-bit c ++ 11/14 Standard Library di https://github.com/ambroise-leclerc/ETL/tree/master/libstd
sumber
Saya tidak ingat standar yang pernah menyebutkan kata heap, kecuali dalam deskripsi fungsi heap seperti
push_heap
et al. Semua alokasi dinamis dilakukan di toko gratis.sumber
Free Store adalah kumpulan memori heap yang tidak dialokasikan yang diberikan ke program yang digunakan oleh program untuk alokasi dinamis selama eksekusi program. Setiap program dilengkapi dengan kumpulan memori heap yang tidak dialokasikan yang dapat digunakan selama eksekusi. Kumpulan memori yang tersedia ini disebut sebagai penyimpanan gratis program. Memori penyimpanan gratis yang dialokasikan tidak bernama.
sumber