Pemrograman C

CARA MENGGUNAKAN FUNGSI MALLOC DI C

CARA MENGGUNAKAN FUNGSI MALLOC DI C
Malloc adalah fungsi bawaan yang dideklarasikan dalam file header . Malloc adalah nama pendek untuk 'alokasi memori' dan digunakan untuk secara dinamis mengalokasikan satu blok besar memori yang berdekatan sesuai dengan ukuran yang ditentukan. Ada dua jenis alokasi memori statis dan dinamis. Alokasi memori statis dilakukan pada waktu kompilasi, dan tidak berubah saat runtime. Alokasi memori dinamis mengalokasikan memori saat runtime untuk ini; kami menggunakan malloc. Sekarang intinya adalah dari mana memori ini berasal, jadi semua persyaratan dinamis dalam C dipenuhi dari memori heap. Pada dasarnya, aplikasi/program kita akan memiliki 3 jenis memori

  • Memori tumpukan bersifat lokal untuk setiap metode, dan ketika metode kembali, tumpukan secara otomatis menghapusnya.
  • Area memori global mengalokasikan memori untuk semua variabel global. Area memori ini dibuat di awal program, dan pada akhirnya, secara otomatis menghapus area memori.
  • Memori tumpukan selalu menjadi musuh yang memenuhi semua persyaratan dinamis program/aplikasi. Setiap kali kita akan menggunakan fungsi malloc, itu akan meminjam beberapa memori dari heap dan memberi kita pointer ke sana.

Sintaksis:

Sintaks malloc adalah (void*)malloc(size_t size). Jadi sintaksnya mengatakan bahwa malloc membutuhkan ukuran, itu akan mengembalikan pointer pada dasarnya pointer kosong dan ukuran t didefinisikan dalam sebagai bilangan bulat tak bertanda. Fungsi Malloc hanya mengalokasikan blok memori sesuai dengan ukuran yang ditentukan di heap seperti yang Anda lihat di sintaks bahwa ukuran perlu ditentukan dan, jika berhasil, ia mengembalikan pointer yang menunjuk ke byte pertama dari memori yang dialokasikan jika tidak mengembalikan NULL. Jadi, tugas malloc adalah mengalokasikan memori saat run time.

Mengapa membatalkan penunjuk:

Malloc tidak tahu apa yang ditunjuknya; itu hanya berarti tidak tahu data apa yang akan disimpan di lokasi memori itu. Itu hanya mengalokasikan memori yang diminta oleh pengguna tanpa mengetahui jenis data yang akan disimpan di dalam memori. Itu sebabnya ia mengembalikan pointer kosong.

Malloc hanya mengalokasikan memori setelah itu menjadi tanggung jawab pengguna untuk mengetik ke tipe yang sesuai sehingga dapat digunakan dengan baik dalam program. Void pointer adalah pointer yang dapat menunjuk semua jenis data malloc mengembalikan pointer void karena tidak tahu jenis data mana yang akan disimpan di dalam memori itu.

Di sini kami meminta malloc untuk mengalokasikan 6 byte memori sekarang jika malloc berhasil akan mengembalikan pointer kosong. Dalam hal ini, kita harus mengetikkannya ke pointer tipe integer karena kita ingin menyimpan integer di memori itu. Di sini malloc mengalokasikan 6 byte memori dalam satu heap, dan alamat byte pertama disimpan di pointer ptr.

Contoh Program:

Berikut adalah contoh program sederhana untuk memahami konsep malloc dengan cara yang benar.

Di sini Anda dapat melihat dengan fungsi printf saya meminta pengguna untuk memasukkan jumlah bilangan bulat. Kami telah mendeklarasikan dua variabel di atas i dan n. Variabel n adalah tempat kita akan menyimpan angka yang dimasukkan oleh pengguna. Setelah itu, kami memiliki fungsi malloc; kami ingin malloc mengalokasikan ukuran yang setara dengan ukuran n bilangan bulat. Kami mengalikan ukuran jika int dengan n; ini akan memberi kita ukuran n bilangan bulat. Setelah itu, malloc akan mengembalikan pointer kosong, dan kita mengetiknya ke pointer integer, dan kita menyimpan alamatnya di dalam pointer ptr. Typecasting penting karena ini adalah praktik yang baik.

Sekarang, jika pointer berisi NULL, itu berarti memori tidak tersedia. Jadi kami hanya akan keluar dari program dengan status kegagalan keluar. Jika bukan ini masalahnya, kita dapat dengan mudah menjalankan for loop.

Loop akan berjalan dari 0 hingga n-1, dan kami akan meminta pengguna untuk memasukkan bilangan bulat satu per satu setiap kali. Di dalam fungsi scanf, ada satu hal yang ditulis ptr+i seperti yang kita ketahui bahwa ptr berisi alamat byte pertama memori. Katakanlah alamat itu 1000 di sini saya sama dengan nol awalnya jadi 1000+0 adalah 1000 jadi di dalam alamat itu bilangan bulat pertama kita akan disimpan kemudian setelah itu ketika saya menjadi 1 jadi 1000+1 yang secara internal ditafsirkan sebagai (1000) +1 *4 jika saya mengasumsikan ukuran bilangan bulat adalah 4 byte, dan itu akan sama dengan 1004, maka bilangan bulat berikutnya akan disimpan dalam lokasi 1004. Dan ini akan berlanjut dengan cara ini alamatnya seperti 1000, 1004, 1008 dan seterusnya. Kami tidak menggunakan ampersand sebelum ptr+i karena ptr sudah memberi kami alamat saat kami menulis ptr, yang hanya berupa pointer, dan berisi alamat, bukan nilai, jadi tidak ada persyaratan untuk menempatkan ampersand di depannya, dan konsep ini harus jelas.

Di sini, di loop ini, kami hanya melakukan satu hal, kami mencetak semua bilangan bulat di layar; jelas, kami menggunakan ptr+i, tetapi di sini, dalam kasus ini, kami melakukan dereferensi karena ptr+i mewakili sebuah alamat, jadi kami perlu melakukan dereferensi. Jika saya sama dengan 0, itu akan menjadi 1000 karena kami mengasumsikan alamat pertama adalah 1000, jadi kami mendereferensikannya; kita akan mendapatkan bilangan bulat pertama maka i sama dengan 1, dan itu akan menjadi 1001 tetapi diinterpretasikan sebagai 1004 jika ukuran bilangan bulat adalah 4. Lagi. Kami mendereferensikannya, jadi itu akan memberi kami 2dan bilangan bulat. Dengan cara ini, semuanya bekerja.

Jadi, ini pada dasarnya adalah program sederhana yang meminta pengguna untuk memasukkan n bilangan bulat, dan kemudian kita hanya menampilkan bilangan bulat tersebut di layar. Setelah menjalankan program, ini akan menampilkan.

Pertama, kami meminta pengguna untuk memasukkan jumlah bilangan bulat, dan kemudian pengguna memasukkan bilangan bulat, dan kami hanya menampilkannya di layar.

Kesimpulan:

Tidak ada yang salah dalam program di atas selama kita melanjutkannya untuk waktu yang sangat lama di sini kita meminjam memori dari heap, tetapi kita tidak pernah mengembalikan memori kembali ke heap itu hanya terjadi dalam kasus di mana program/aplikasi memiliki untuk berlari dalam durasi yang lama seperti 24 jam. Mereka akan memanggil fungsi malloc lagi, dan lagi itu berarti setiap kali mereka meminjam memori dari heap dan tidak pernah kembali, ini adalah pemrograman yang buruk, jadi kita harus menulis bebas (alamat memori yang harus dilepaskan) sebelum kembali. Jadi kapanpun menggunakan malloc gratis itu penting. Jadi, menggunakan malloc, kami menghemat memori, dan malloc mengalokasikan memori sebesar yang Anda minta.

Selamat alokasi memori dinamis!

Cara Meningkatkan FPS di Linux?
FPS adalah singkatan dari Bingkai per detik. Tugas FPS adalah mengukur kecepatan bingkai dalam pemutaran video atau pertunjukan game. Dengan kata sede...
Game Lab Aplikasi Oculus Teratas
Jika Anda adalah pemilik headset Oculus maka Anda harus tahu tentang sideloading. Sideloading adalah proses menginstal konten non-toko di headset Anda...
10 Game Teratas untuk Dimainkan di Ubuntu
Platform Windows telah menjadi salah satu platform yang mendominasi untuk bermain game karena persentase besar dari game yang berkembang saat ini untu...