1) Để cho phép thừa kế và đa hình, các lớp học có một số chi phí. Hồ sơ không cho phép chúng, và trong một số trường hợp có thể hơi nhanh hơn và đơn giản hơn để sử dụng. Không giống như các lớp, luôn được phân bổ trong heap và được quản lý thông qua các tham chiếu, các bản ghi có thể được cấp phát trên stack, truy cập trực tiếp và gán cho nhau mà không cần phải gọi phương thức "Assign". Ngoài ra các bản ghi cũng hữu ích để truy cập các khối bộ nhớ với một cấu trúc nhất định, vì bố cục bộ nhớ của chúng chính xác như cách bạn định nghĩa nó. Bố cục bộ nhớ của cá thể lớp được điều khiển bởi trình biên dịch và có dữ liệu bổ sung để làm cho các đối tượng hoạt động (tức là con trỏ đến Bảng Phương pháp Ảo). Trừ khi bạn phân bổ các bản ghi động, sử dụng New() hoặc GetMem(), bộ nhớ của bản ghi được quản lý bởi trình biên dịch, các phao hoặc các mảng tĩnh: bộ nhớ biến toàn cục được cấp phát khi khởi động và phát hành khi chương trình kết thúc, và các biến cục bộ được cấp phát trên ngăn xếp nhập hàm/thủ tục/phương thức và thoát ra. Việc phân bổ/giải phóng bộ nhớ trong ngăn xếp nhanh hơn vì nó không yêu cầu các cuộc gọi đến trình quản lý bộ nhớ, nó chỉ là một vài hướng dẫn lắp ráp để thay đổi sổ đăng ký ngăn xếp.Nhưng lưu ý rằng việc phân bổ cấu trúc lớn trên ngăn xếp có thể gây ra tràn ngăn xếp, vì kích thước ngăn xếp tối đa được cố định và không phải là rất lớn (xem các tùy chọn trình liên kết). Nếu các bản ghi là các trường của một lớp, chúng được cấp phát khi lớp được tạo ra và được giải phóng khi lớp đó được giải phóng.
3) Một trong những ưu điểm của generics là loại bỏ nhu cầu quản lý con trỏ ở mức độ thấp - nhưng hãy lưu ý đến các hoạt động bên trong.
Nguồn
2009-12-10 08:52:15
Cảm ơn ông Wheeler và một câu hỏi khác: Con trỏ để ghi = Lớp học? –
Không, con trỏ để ghi = con trỏ để ghi. Một đối tượng (cá thể lớp) khác với một bản ghi theo nhiều cách. –