Bố cục bộ nhớ của một mảng .NET là gì?Bố cục bộ nhớ của một mảng .NET
Đưa ví dụ mảng này:
Int32[] x = new Int32[10];
Tôi hiểu rằng phần lớn các mảng là như thế này:
0000111122223333444455556666777788889999
đâu mỗi nhân vật là một byte, và các chữ số tương ứng với chỉ số thành mảng.
Bên cạnh đó, tôi biết rằng có một tài liệu tham khảo loại, và một syncblock-index cho tất cả các đối tượng, do đó trên có thể được điều chỉnh như sau:
ttttssss0000111122223333444455556666777788889999
^
+- object reference points here
Bên cạnh đó, độ dài của mảng cần phải được được lưu trữ, vì vậy có lẽ điều này chính xác hơn:
ttttssssllll0000111122223333444455556666777788889999
^
+- object reference points here
Điều này có hoàn chỉnh không? Có nhiều dữ liệu hơn trong một mảng không? Lý do tôi hỏi là chúng tôi đang cố gắng ước tính có bao nhiêu bộ nhớ khác nhau trong bộ nhớ đại diện của một kho dữ liệu khá lớn sẽ mất và kích thước của các mảng thay đổi khá một chút, do đó, các trên không có thể có tác động lớn trong một giải pháp, nhưng có lẽ không quá lớn trong một giải pháp khác.
Vì vậy, về cơ bản, đối với một mảng, có bao nhiêu chi phí ở đó, đó là cơ bản là câu hỏi của tôi.
Và trước khi các mảng là xấu đội ngũ tỉnh dậy, phần này của giải pháp là loại xây dựng tĩnh một lần-tham chiếu thường để sử dụng danh sách có thể phát triển là không cần thiết tại đây.
Chỉ cần một lưu ý nhỏ: khối đồng bộ hóa xuất hiện trước tham chiếu methodtype. Biến chứa một con trỏ (tham chiếu) tới tham chiếu phương thức ('tttt' ở trên), bỏ qua phần syncblock. Bố trí thực sự trông giống như 'ssssttttllll000011 ... 9999NULL' cho mảng không có kích thước cụ thể hoặc giới hạn cụ thể thấp hơn. – Abel