Halo, dan selamat datang kembali. Dalam kuliah ini, saya ingin berbicara tentang alokasi memori dinamis.
Ini terkait langsung dengan pointer, Anda hanya dapat menggunakan ini
pada pointer. Jadi mari kita mulai.
Jadi, setiap kali Anda mendefinisikan variabel
dalam c, kompiler secara otomatis mengalokasikan jumlah penyimpanan yang tepat untuk Anda berdasarkan tipe data.
Kami telah melihat ini selama ini. Saat kita membuat integer, float, double, kita tidak perlu mengalokasikan memori apapun.
Kompiler melakukannya untuk Anda. Ini benar-benar mengalokasikan beberapa memori.
Hal yang sama berlaku untuk pointer. Saat Anda membuat pointer,
memori dialokasikan untuk Anda, sehingga menyimpan tipe pointer, alamat.
Sekarang itu tidak berarti bahwa memori dialokasikan untuk alamat itu.
Sampai saat ini, setiap kali kami menetapkan data ke --
ke pointer, kami selalu menetapkan variabel yang ada.
Jadi jika kita ingin menetapkan
data ke sebuah pointer, kita telah menggunakan alamat ampersand operator pada
variabel yang sudah memiliki memori yang dialokasikan untuk variabel itu.
Tetapi bagaimana jika Anda ingin membuat pointer dan Anda tidak ingin menetapkannya sebagai alamat
operator, Anda ingin mengalokasikan memori secara dinamis. Itulah yang dimaksud dengan seluruh kuliah ini.
Jadi seringkali diinginkan untuk dapat mengalokasikan penyimpanan secara dinamis saat
program sedang berjalan. Alokasikan memori sesuai kebutuhan.
Jika Anda memiliki program yang dirancang untuk membaca sekumpulan data dari file
ke dalam array di memori, Anda memiliki tiga pilihan.
Anda dapat menentukan larik untuk memuat jumlah maksimum elemen yang memungkinkan yang
mengkompilasi waktu, ukurannya tetap.
Jika Anda mendefinisikan array yang memiliki 50 elemen, itu
hanya akan berisi 50 elemen. Kompiler menentukan bahwa itu 50,
itu akan mengalokasikan banyak memori saat dijalankan.
Anda dapat menggunakan array panjang variabel dengan dimensi ukuran runtime array.
Kami berbicara sedikit tentang array panjang variabel
ini, mereka tidak didukung hingga C11. Mereka benar-benar mengeluarkan C11, mereka menambahkan C99.
Di sinilah Anda dapat memasukkan variabel.
Tapi ini masih semacam ukuran tetap karena
semua itu berarti array yang ditautkan variabel, artinya Anda dapat meneruskan variabel untuk ukuran.
Tapi mereka masih statis.
Atau pilihan terbaik adalah Anda dapat mengalokasikan array secara dinamis sesuai kebutuhan.
Dan ada berbagai fungsi c yang dapat Anda panggil untuk melakukan ini.
Jadi akan sangat berguna untuk dapat mengalokasikan memori secara dinamis.
Jadi dengan pendekatan pertama yang telah kami lakukan sampai sekarang apakah itu
array atau apakah itu tipe data, ukurannya tetap.
Anda harus mendefinisikan larik Anda untuk memuat jumlah maksimum elemen yang akan
langsung masuk ke dalam larik.
Jadi Anda akan melakukan sesuatu seperti ini, int dataArray [1000].
Apa artinya ini adalah file data tidak dapat berisi lebih dari seribu elemen.
Jika ya, program Anda akan rusak.
Jadi, Anda hanya perlu berharap bahwa file apa pun yang Anda baca tidak memiliki banyak data.
Program Anda tidak akan bekerja dengan kumpulan file besar atau file besar.
Dan jika Anda ingin bekerja dengan file besar, Anda harus kembali dan Anda harus membuat array lebih besar.
Anda harus mengubah ukurannya,
tetapi kemudian Anda harus mengkompilasi ulang semua itu, waktunya dikompilasi.
Apa pun nilai yang Anda pilih, Anda selalu memiliki peluang
untuk mengalami masalah yang sama lagi di masa mendatang karena ukurannya tetap.
Ukuran ini ditentukan saat Anda mengkompilasi kode,
tidak menyesuaikan saat Anda menjalankan program.
Itu tidak berubah secara dinamis.
Dengan menggunakan fungsi alokasi memori dinamis, Anda bisa mendapatkan penyimpanan sesuai kebutuhan.
Pendekatan ini memungkinkan Anda untuk mengalokasikan memori saat program dijalankan.
Jadi pikirkan keuntungan dari ini. Pertama-tama Anda tidak
membuat banyak memori yang mungkin tidak Anda
gunakan, Anda hanya akan membuat sebanyak yang Anda butuhkan.
Dan jika Anda membutuhkan lebih banyak, Anda dapat mengalokasikan lebih banyak.
Anda tidak perlu kembali dan mengkompilasi ulang dan mengubah ukuran.
Jadi alokasi memori dinamis adalah cara yang harus dilakukan.
Itu tergantung pada konsep pointer dan memberikan
insentif yang kuat untuk menggunakan pointer dalam kode Anda.
Jadi kami berbicara tentang keuntungan dari pointer dan
Anda mungkin berpikir sendiri dengan baik, oke, mereka adalah konsep yang keren tapi
mengapa kita perlu menggunakannya, ini
adalah salah satu alasan besar, sehingga Anda dapat mengalokasikan memori secara dinamis.
Dan lagi, apa ini -- C adalah tentang menjadi bahasa yang efisien
dan tidak menggunakan banyak memori.
Jadi c berjalan pada sistem tertanam, pemrograman waktu nyata dan ini
adalah salah satu alasan mengapa karena Anda dapat membatasi berapa banyak memori
yang Anda gunakan berdasarkan kebutuhan.
Jadi alokasi memori dinamis memungkinkan memori untuk menyimpan data dialokasikan secara dinamis
ketika program dijalankan.
Mengalokasikan memori secara dinamis hanya mungkin karena Anda
memiliki pointer yang tersedia.
Karena Anda memiliki alamat dan Anda
dapat mengubah seberapa banyak penunjuk menunjuk, Anda dapat menyesuaikan kembali memori.
Sebagian besar program produksi akan menggunakan alokasi memori dinamis.
Jika Anda menulis kode dalam c, Anda akan menggunakan ini.
Bahkan jika Anda seorang pemula, Anda akan
menggunakan alokasi memori dinamis. Sebagian besar program yang berguna akan menggunakan konsep ini.
Mengalokasikan data secara dinamis memungkinkan Anda membuat pointer saat runtime yang cukup
besar untuk menampung jumlah data yang Anda perlukan untuk tugas tersebut,
sehingga Anda tidak membuang-buang memori. Vital.
Kita juga harus berbicara tentang tumpukan versus tumpukan.
Ada dua cara Anda dapat menyimpan memori dalam sebuah program, dua
struktur data yang berbeda Anda dapat menyimpan data di tumpukan atau Anda dapat menyimpan
data di tumpukan.
Alokasi memori dinamis menyimpan semua yang ada di heap.
Kami tidak akan membahas secara rinci bagaimana ini diatur tetapi pada dasarnya.
Saat Anda menyimpan data di heap, ini memungkinkan lebih
banyak perubahan.
Anda dapat secara sewenang-wenang mengubah ukuran objek data dan itu bertahan
lebih lama ketika Anda mengalokasikan memori di tumpukan,
itu menempel di keseluruhan program Anda.
Saat Anda menggunakan tumpukan, itu lebih membatasi.
Tumpukan digunakan untuk semuanya mulai dari argumen fungsi dan variabel lokal.
Di situlah semua yang disimpan.
Dan itulah mengapa kami berbicara tentang tumpukan panggilan.
Itu melihat metode
dan fungsi. Saya menggunakan metode sesekali, tetapi metode benar-benar merupakan istilah berorientasi
objek, jadi fungsi.
Segala sesuatu yang terkait dengan fungsi dibuat di tumpukan.
Jadi artinya adalah ketika Anda menjalankan suatu
fungsi, itu akan diletakkan di tumpukan. Variabel lokal diletakkan di tumpukan.
Saat Anda keluar dari fungsi, semuanya akan dihapus.
Jadi memori yang terletak di tumpukan tidak bertahan lama.
Itulah salah satu alasan ketika Anda mengalokasikan memori secara
dinamis di heap
karena Anda mengontrol kapan Anda menggunakannya dan kapan Anda tidak menggunakannya, Anda mengalokasikannya dan Anda menghapusnya.
Barang-barang di tumpukan, Anda tidak mengontrol. Secara otomatis akan
dihapus, secara otomatis akan dialokasikan.
Jadi variabel lokal, variabel di dalam fungsi seperti utama,
yang dibuat di tumpukan dan sebagainya.
Memori di heap berbeda, itu dikendalikan oleh Anda, programmer.
Ketika Anda mengalokasikan memori di heap, terserah Anda untuk melacak kapan memori yang Anda
alokasikan tidak lagi diperlukan, jadi Anda harus menghapus memori.
Anda harus mengosongkan ruang
saat tidak lagi digunakan oleh Anda. Dan ini penting karena
memori adalah sumber daya yang sangat, sangat langka.
Hari ini kami memiliki banyak memori yang Anda dapat menjalankan komputer, 12
gigs, 16 gigs apapun itu. Tetapi untuk program
yang disematkan yang berjalan di perangkat, Anda tidak
perlu memiliki banyak memori. Jadi Anda ingin mengontrol berapa banyak
penggunaan memori dan Anda juga ingin melepaskan memori setelah selesai menggunakannya
sehingga aplikasi lain dapat menggunakannya.
Sekali lagi, lebih penting dalam sistem tipe tertanam tingkat rendah.
Tapi ini adalah kebebasan yang tidak dimiliki banyak bahasa. Kemampuan untuk mengontrol
memori manajer Anda oleh programmer, dan itu dapat
membuat program jauh lebih efisien dan lebih cepat.
Jadi dalam kuliah berikutnya, kita akan berbicara tentang bagaimana Anda sebenarnya dapat
melakukan ini, fungsi apa yang dapat Anda gunakan. Jelas, ada fungsi berbeda yang dapat Anda
panggil untuk mengalokasikan memori ke memori bebas. Terima kasih.