Một lớp được tạo thành bình thường của các biến thành viên & phương pháp. Khi chúng ta tạo một thể hiện của một lớp, bộ nhớ được cấp phát cho các biến thành viên của một lớp. Liệu các phương pháp thành viên cũng chiếm bộ nhớ? Các phương pháp này được lưu trữ ở đâu?Thành viên lớp học có chiếm được bộ nhớ không?
Trả lời
Giả sử chúng ta có lớp sau đây:
public class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
public string SayName()
{
string hello = "Hello! My name is ";
return hello + name;
}
}
Person p = new Person("John");
string yourName = p.SayName();
Chức năng SayName()
đi trên Call Stack
, và đối tượng Person p
và đó là tài sản (Name
) sẽ ở lại trong bộ nhớ cho đến khi Garbage Collection
đi vào và làm sạch nó lên.
Về mặt bộ nhớ, bạn nên quan tâm hơn đến các trường mẫu (thuộc tính) của đối tượng, lượng đối tượng bạn đang xử lý và đối tượng của bạn là Reader
hoặc Connection
. Nếu đối tượng của bạn là Reader
hoặc Connection
, bạn cần xem xét tuyên bố using
.
Pseudo-code:
using(DatabaseConnection dbConn = new DatabaseConnection()
{
// Process your calls and data
}
// The object is Disposable and it's resources are cleared
"Các biến bên trong SayName(), sẽ là hello, chỉ ở lại trong bộ nhớ trong khi chức năng là trong phạm vi. Vì vậy, một khi chức năng hoàn thành, biến không còn trong bộ nhớ. " Không hoàn toàn đúng, GC có thể thu thập chúng ngay khi tham chiếu không còn cần thiết nữa (và điều này bao gồm 'this'!) – porges
Có. Điều này đúng. Tôi đoán tôi nên làm cho nó rõ ràng hơn về mặt truy cập. –
"một số thời gian [sic] của' Reader' hoặc 'Kết nối'" - chỉ đơn giản là tổng quát thành 'IDisposable' có thể rõ ràng hơn, IMO –
Lớp chỉ là một bản in màu xanh, Nó không chiếm bất kỳ không gian càng lâu càng biến kiểu lớp đã không được định nghĩa. Khi đối tượng/thể hiện của lớp loại được xác định, thành viên lớp sẽ chiếm một số không gian trong bộ nhớ. Và kích thước của cá thể bằng với tổng kích thước của các thành viên xác định trong lớp.
- 1. Lớp học không có thành viên dữ liệu có dấu chân bộ nhớ trong java không?
- 2. Làm các thành viên tĩnh của một lớp chiếm bộ nhớ nếu không có đối tượng của lớp đó được tạo ra?
- 3. Thành viên lớp học "tĩnh"
- 4. khi nào thành viên tĩnh nhận được bộ nhớ
- 5. Thành viên lớp học Python Khởi tạo
- 6. Thành viên lớp học chung trong C#?
- 7. Tham chiếu đối tượng có chiếm thêm bộ nhớ không?
- 8. Android - Bộ nhớ cache bitmap chiếm rất nhiều bộ nhớ
- 9. SQL Server 2008 chiếm nhiều bộ nhớ?
- 10. Các phương thức trong các cá thể lớp có chiếm một vị trí trong bộ nhớ không?
- 11. một lớp học có thể có các thành viên dữ liệu ảo không?
- 12. Sử dụng bộ nhớ Python: Đối tượng nào của tôi đang chiếm nhiều bộ nhớ nhất?
- 13. Mảng lớn chiếm nhiều không gian bộ nhớ hơn
- 14. Thành viên lớp học mơ hồ trong vb.net
- 15. Thành viên riêng tư trong lớp học pimpl?
- 16. Cách khởi tạo shared_ptr là thành viên của lớp học?
- 17. Các thành viên tĩnh có giúp hiệu quả bộ nhớ không?
- 18. Đóng cửa là thành viên của lớp học?
- 19. bạn bè có lớp học nhưng không thể truy cập thành viên riêng
- 20. Các lớp học chung có chia sẻ thành viên tĩnh không?
- 21. Lớp không có thành viên dữ liệu trong C++
- 22. Trong Java, các thành viên lớp tĩnh có được chia sẻ giữa các chương trình không?
- 23. HashSet of Strings chiếm quá nhiều bộ nhớ, gợi ý ...?
- 24. Truy cập biến thành viên được bảo vệ bên ngoài một lớp học
- 25. Lớp thành viên tĩnh - khai báo lớp riêng tư và lớp thành viên riêng tư?
- 26. Do các trường dữ liệu SQLite rỗng có chiếm thêm bộ nhớ không?
- 27. Tính năng "Khởi tạo thành viên trong lớp" có được tạo thành C++ 11 không?
- 28. Làm cách nào để giữ các lớp học có chứa các thành viên cụ thể?
- 29. Tại sao cấu trúc không được quản lý không phải là thành viên của một lớp được quản lý?
- 30. Lớp C++ không có thành viên tên là
Phương pháp triển khai phương pháp mất bộ nhớ trên mỗi Loại (và tôi nghĩ mỗi lần sàng lọc bằng generics?) Nhưng điều này không * tăng * trên mỗi đối tượng đối tượng. Ví dụ. 'obj.GetType()' trả về kiểu mà đại diện cho các phương thức đã nói (và một loạt các thứ khác). Các biến (ví dụ) * là mỗi trường hợp, tất nhiên. –
@pst, tại sao đăng câu trả lời hay như nhận xét? –
@AlexeiLevenkov làm cho một điểm tốt. Tôi chắc chắn sẽ bỏ phiếu và tôi tự trả lời câu hỏi này với những gì tôi cho là một câu trả lời khá tốt. –