Penting untuk memiliki definisi yang jelas tentang arti istilah. Sayangnya tampaknya ada beberapa definisi tentang apa yang dimaksud dengan array statis dan dinamis.
Variabel statis adalah variabel yang ditentukan menggunakan alokasi memori statis . Ini adalah konsep umum yang tidak bergantung pada C / C ++. Di C / C ++ kita dapat membuat variabel statis dengan cakupan global, file, atau lokal seperti ini:
int x[10];
static int y[10];
foo() {
static int z[10];
Variabel otomatis biasanya diimplementasikan menggunakan alokasi memori berbasis tumpukan . Array otomatis dapat dibuat di C / C ++ seperti ini:
foo() {
int w[10];
Apa yang dimiliki array ini x, y, z
, dan w
kesamaannya adalah bahwa ukuran untuk masing-masing array tersebut tetap dan ditentukan pada waktu kompilasi.
Salah satu alasan penting untuk memahami perbedaan antara array otomatis dan array statis adalah karena penyimpanan statis biasanya diimplementasikan di bagian data (atau bagian BSS ) dari file objek dan kompiler dapat menggunakan alamat absolut untuk mengakses array. yang tidak mungkin dilakukan dengan penyimpanan berbasis tumpukan.
Yang biasanya dimaksud dengan array dinamis bukanlah yang dapat diubah ukurannya tetapi yang diimplementasikan menggunakan alokasi memori dinamis dengan ukuran tetap yang ditentukan pada waktu proses. Di C ++ ini dilakukan dengan menggunakan new
operator .
foo() {
int *d = new int[n];
Tetapi dimungkinkan untuk membuat larik otomatis dengan ukuran perbaikan yang ditentukan saat runtime menggunakan alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Untuk array dinamis sejati, seseorang harus menggunakan sesuatu seperti std::vector
di C ++ (atau array panjang variabel di C ).
Apa yang dimaksud dengan penugasan dalam pertanyaan OP? Saya pikir sudah jelas bahwa apa yang diinginkan bukanlah array statis atau otomatis tetapi yang baik menggunakan alokasi memori dinamis menggunakan new
operator atau array berukuran tidak tetap menggunakan mis std::vector
.