Static array là gì?

Noun Programming
Mảng tĩnh

Mảng tĩnh (static array) là mảng (array) có kích thước (size) cố định khi chúng được tạo và do đó không cho phép chèn hoặc xóa các phần tử (element). Trong khi đó mảng động (dynamic array ) có kích thước thay đổi. Tuy nhiên, bằng cách cấp phát một mảng mới và sao chép nội dung của mảng cũ vào nó, có thể triển khai hiệu quả phiên bản động của một mảng.

Khi mảng tĩnh (static array) được tạo, kích thước của nó không thể được sửa đổi. Ví dụ code bên dưới khai báo một mảng tĩnh bên trong hàm (function) main trong C có kích thước 5.


void main()
{
    int A[5];
}

Bây giờ, câu hỏi là nó được tạo ra ở đâu? Vì nó được tạo bên trong hàm main dưới dạng một biến (variable), bộ nhớ của nó sẽ được tạo bên trong ngăn xếp (stack). Vì vậy, một mảng có kích thước 5 sẽ được tạo bên trong bộ nhớ chính (main memory) như một phần của bản ghi kích hoạt (activation record) của hàm main. Vì vậy, mảng này sẽ được tạo bên trong ngăn xếp.

Tại sao chúng ta gọi nó là tĩnh? Bởi vì kích thước của mảng này đã được quyết định tại thời điểm biên dịch (compile time), nhưng bộ nhớ sẽ được cấp phát (allocate) trong runtime. Không thể cấp phát bộ nhớ tại thời điểm biên dịch. Vì vậy, bộ nhớ sẽ được cấp phát trong runtime và kích thước của bộ nhớ đó đã được quyết định tại thời điểm biên dịch.

Chắc chắn, kích thước của một mảng phải được quyết định tại thời điểm biên dịch bằng ngôn ngữ C. Trong ngôn ngữ C khi bạn đề cập đến kích thước của một mảng, nó phải là một giá trị không đổi, nó không thể là một biến.

Nhưng trong C ++, chúng ta có thể tạo một mảng có kích thước bất kỳ tại run time. Vì vậy, tại run time, kích thước của một mảng có thể được quyết định và mảng đó sẽ được tạo bên trong ngăn xếp trong khi, trong ngôn ngữ C, kích thước chỉ được quyết định tại thời điểm biên dịch.

Chúng ta hãy xem trong C ++, giả sử chúng ta có một biến n và chúng ta lấy giá trị của n từ bàn phím trong runtime. Sau đó, chúng ta có thể khai báo một mảng có kích thước n. Vì vậy, bất kể đầu vào đến từ bàn phím, chúng ta có thể tạo một mảng có kích thước cụ thể đó, vì vậy kích thước của một mảng được quyết định trong runtime. Để hiểu rõ hơn, vui lòng xem đoạn mã dưới đây.


void main()
{
    int n;
    cin>>n;
    int B[n];
}


Learning English Everyday