By mảng tĩnh, tôi giả sử, bạn có nghĩa là một mảng chiều dài cố định (tĩnh được phân bổ, như int array[SIZE]
, không được phân bổ động). Giới hạn kích thước mảng nên phụ thuộc vào phạm vi của mảng được khai báo.
- Nếu bạn đã khai báo mảng trong phạm vi cục bộ (bên trong một số thường trình), giới hạn kích thước được xác định theo kích thước ngăn xếp.
- Nếu gcc đang chạy trên linux, kích thước ngăn xếp được xác định bởi một số biến môi trường. Sử dụng
ulimit -a
để xem và ulimit -s STACK_SIZE
để sửa đổi kích thước ngăn xếp.
- Nếu gcc đang chạy trên các cửa sổ (như MinGW), kích thước ngăn xếp có thể được chỉ định bởi gcc -Wl, - stack, STACK_SIZE.
- Nếu bạn đã khai báo mảng trong phạm vi toàn cục, mảng được lưu trữ trong phần DATA hoặc BSS (dựa trên việc mảng được khởi tạo hoặc chưa được khởi tạo lần lượt). Kích thước phần DATA và BSS được xác định bởi hệ điều hành cơ sở.
- Nếu bạn đã khai báo mảng trong phạm vi tĩnh (như
static int array[SIZE]
), một lần nữa, mảng được lưu trữ trong phần DATA hoặc BSS (dựa trên việc mảng được khởi tạo hay chưa được khởi tạo lần lượt). Kích thước phần DATA và BSS được xác định bởi hệ điều hành cơ sở.
Nguồn
2013-08-22 05:23:17
Điều này ít liên quan đến GCC. Nếu bạn có nghĩa là một đối tượng mảng phạm vi khối với thời gian lưu trữ tự động bởi "mảng tĩnh", thì có hay không nó phù hợp với bộ nhớ phụ thuộc vào kích thước ngăn xếp (giả sử kiến trúc của bạn có một ngăn xếp). –
Những gì tôi có nghĩa là bởi mảng tĩnh là một mảng tuyên bố như thế này: int array [50]? Tôi nhận được một "kích thước của mảng là lỗi quá lớn" trong Gcc trong thời gian biên dịch? – ted
Vâng, loại mảng đó được gọi là "đối tượng mảng [phạm vi khối | phạm vi tệp] với thời lượng lưu trữ tự động". Nếu bạn nhận được một lỗi biên dịch, đó là bởi vì GCC là quá hăng hái (không phải là nó xấu!) Và về cơ bản bảo vệ bạn khỏi chính mình. Tuy nhiên, điều này không phụ thuộc vào trình biên dịch, theo kiểu cổ điển. –