Khi tôi đang sử dụng C++ ở đại học, tôi được yêu cầu sử dụng mảng đa chiều (MDA) bất cứ khi nào có thể, vì nó thể hiện vị trí bộ nhớ tốt hơn vì nó được phân bổ trong một đoạn lớn. Mảng mảng (AoA), mặt khác, được phân bổ trong nhiều khối nhỏ hơn, có thể nằm rải rác khắp nơi trong bộ nhớ vật lý bất cứ nơi nào vị trí tuyển dụng được tìm thấy.So sánh hiệu suất mảng mảng so với mảng đa chiều
Vì vậy, tôi đoán câu hỏi đầu tiên là: đây có phải là một huyền thoại hay đây có phải là lời khuyên đáng giá không?
Giả sử rằng đó là câu hỏi sau, thì câu hỏi tiếp theo sẽ là phải làm gì trong một ngôn ngữ như Java không có MDA thực. Nó không phải là khó để thi đua MDA với một 1DA, tất nhiên. Về cơ bản, đường cú pháp cho ngôn ngữ với MDA có thể được thực hiện như là hỗ trợ thư viện cho các ngôn ngữ không có MDA.
Đây có phải là nỗ lực đáng giá không? Đây có phải là mức độ quá thấp của một vấn đề tối ưu hóa cho một ngôn ngữ như Java không? Chúng ta có nên từ bỏ mảng và sử dụng List
s ngay cả đối với nguyên thủy không?
Câu hỏi khác: trong Java, không phân bổ AoA cùng một lúc (new int[M][N]
) có thể mang lại một cấp phát bộ nhớ khác với làm việc đó theo thứ bậc (new int[M][]; for (... new int[N]
)?
Xem thêm http://stackoverflow.com/questions/2512082/java-multi-dimensional-array-vs-one-dimensional, chứa kết quả điểm chuẩn thực tế. – rwong