2013-07-30 30 views
9

Hiện nay tôi có một mảng TCubeMảng có thể quá lớn không?

CreateCube : array[1..1000] of tcube; 

Hiện đang sử dụng chúng như là một bản đồ, do đó bạn có thể có 30 hình khối rộng, 20 khối cao, do đó làm cho một mạng lưới lớn. Nhưng 1000 khối là không thực sự đủ cho những gì tôi cần, tôi cần nhiều hơn 10.000 khối.

Có mảng nào kích thước này sẽ gây ra sự cố không? Bất kỳ tùy chọn nào khác?

+1

aint một vấn đề trừ khi bạn không có đủ bộ nhớ – Sergio

+0

Vì vậy, trong trường hợp này, 1000 hình khối được thực hiện trong thời gian chạy, vì vậy khi tôi tạo chúng là nó sử dụng nhiều bộ nhớ hơn? hoặc bằng cách xác định mảng, tất cả đã sẵn sàng tạo khối lập phương và tôi chỉ chỉnh sửa bộ nhớ khi tôi thực hiện CreateCube [i]: = tcube.Create (self); –

Trả lời

16

Có hai kịch bản chính, nơi mảng lớn là có vấn đề:

  1. Mảng là quá lớn nên nó sẽ không phù hợp với một khối liền kề của bộ nhớ. Nếu mảng chứa tham chiếu thay vì giá trị thì bạn có thể có đủ bộ nhớ cho mảng, nhưng không đủ bộ nhớ cho các đối tượng được nhắc tới.
  2. Mảng được khai báo dưới dạng biến cục bộ và dẫn đến tràn ngăn xếp. Cách bạn tránh vấn đề đó là di chuyển mảng lên heap. Trong Delphi cách sạch nhất để làm điều đó là làm cho mảng thành mảng động. Ngay cả khi bạn biết kích thước tại thời gian biên dịch, bạn có thể sử dụng mảng động để di chuyển bộ nhớ khỏi ngăn xếp và lên vùng heap.
5

Mảng có thể lớn bằng bộ nhớ cho phép. Nhưng nếu đó là một biến địa phương, hoặc nếu bạn vượt qua nó theo giá trị cho một số phương pháp, sau đó hãy cẩn thận, bạn có thể dễ dàng có được ra khỏi ngăn xếp.

2

Chọn cấu trúc dữ liệu phù hợp là thứ tôi chỉ có thể tư vấn cho bạn. Phần lớn nó sẽ phụ thuộc vào cách thức mà các mảng sẽ được. Một mảng thưa thớt có thể hoạt động tốt nếu mảng lớn nhưng có dân cư nhẹ.

Cá nhân, tôi sẽ mã hóa một lớp danh sách tùy chỉnh để chứa các phiên bản TCube. Điều này có một số lợi thế hơn một mảng. Thứ nhất, nó sẽ tiêu thụ bộ nhớ động. Thứ hai, bạn có thể thêm các phương thức bổ sung vào lớp này cho phù hợp với các ứng dụng của bạn.

Các vấn đề liên quan