Mengapa Pemrogram Membutuhkan Pointer Daripada Array Tetap

16

Anda ingin membuat editor teks. Mungkin itu pengganti modern untuk Vi atau versi baru dari Notepad. Tidak masalah. Tujuannya sederhana: memungkinkan pengguna mengedit file ASCII standar.

Pikirkan tentang seberapa sering pemrogram menggunakan alat ini. Ini adalah antarmuka utama mereka dengan mesin. Di situlah pikiran menjadi kode. Tentu saja, Anda ingin rasanya enak. Anda ingin itu cepat. Anda ingin itu menangani alur kerja spesifik Anda. Jadi, Anda memutuskan untuk membangun sendiri.

Tantangan pertama adalah struktur data. Bagaimana cara menyimpan teks di memori? Anda memerlukan cara untuk memanipulasi karakter dengan cepat. Insting awal Anda? Baris teks.

Anda mengambil sebuah array. Cukup sederhana. Baris tipikal adalah 80 karakter. File biasa mungkin memiliki 1.000 baris. Anda mendeklarasikan array dua dimensi:

Itu berarti 80.000 karakter. Dapat dikelola. Membersihkan.

Tapi kemudian kenyataan muncul. Anda memikirkan tentang kasus edge.

Beberapa file adalah daftar log yang sangat besar. Ribuan baris, masing-masing panjangnya hampir 10 karakter.

File lainnya adalah dump data tujuan khusus. Satu baris mungkin berisi 542 karakter yang mewakili pasangan asam amino dalam urutan DNA.

Dan editor modern memungkinkan Anda membuka banyak file secara bersamaan. Katakanlah Anda membatasinya pada 10 file yang terbuka. Anda menetapkan batas keras 1.000 karakter per baris dan 50.000 baris per file.

Sekarang deklarasi Anda terlihat seperti ini:

Anda menghitung angkanya. 50.000 kali 1.000 kali 10. Itu berarti 500 juta karakter.

Kebanyakan komputer tidak dapat mengatasinya. Bahkan dengan memori virtual, ini merupakan suatu ketegangan. Jalankan tiga contoh editor Anda pada sistem multi-pengguna, dan Anda akan mencekik RAM. Ini adalah pemborosan yang luar biasa. Anda mengalokasikan ruang untuk skenario terburuk, ketika sebagian besar pengguna hanya mengedit file 100 baris yang memakan 4.000 byte.

Masalah dengan array sangatlah kaku. Anda harus menyatakan ukuran maksimum di setiap dimensi terlebih dahulu. Dimensi tersebut berlipat ganda. Dan jika seseorang mencoba membuka file dengan baris 2.000 karakter? Anda kurang beruntung. Panjang garis secara teknis tidak terbatas. Anda tidak dapat memprediksinya.

Inilah sebabnya mengapa ada petunjuk.

Bagaimana Pointer Mengatasi Pemborosan Memori

Pointer memungkinkan Anda membangun struktur data dinamis. Daripada memesan ruang statis terlebih dahulu, Anda mengalokasikan memori dari heap saat program berjalan.

Anda menggunakan jumlah memori yang tepat yang dibutuhkan dokumen. Tidak ada limbah. Saat Anda menutup file, Anda mengembalikan memori itu ke heap. Bagian lain dari program dapat menggunakannya. Memori didaur ulang.

Ini bukan hanya tentang menghemat ruang. Ini tentang fleksibilitas. Anda tidak perlu menebak panjang garis maksimal. Anda mengalokasikan apa yang Anda butuhkan, saat Anda membutuhkannya.

Jika Anda masih bertanya-tanya apa sebenarnya byte itu, atau bagaimana “mega” dan “giga” diterjemahkan ke dalam batasan dunia nyata, bacalah tentang bit dan byte. Lalu kembalilah. Anda harus memahami batasan perangkat keras untuk memahami mengapa array statis gagal di sini.