Câu hỏi

26/04/2013 20:53
Xin giải thích về Heap và Stack trong C#, cơ chế làm việc như thế nào?
Danh sách câu trả lời (1)

Bất kỳ ứng dụng viết bằng ngôn ngữ nào, sau khi dịch đều được đổi ra dạng ngôn ngữ máy. Khi 1 chương trình chạy, nó truy xuất một số vùng nhớ chứa thông tin khác nhau như sau:
- Vùng nhớ chứa dữ liệu tĩnh của chương trình, vùng nhớ này chứa các biến dữ liệu được khai báo trong chương trình. Vùng này có kích thước cố định trong suốt quá trình chạy của ứng dụng.
- Vùng nhớ chứa dữ liệu động của chương trình, vùng nhớ này chứa các dữ liệu được cấp phát động (qua lệnh New, hàm malloc()...). Ta thường gọi vùng nhớ này là Heap.
- Vùng nhớ phục vụ cho việc gọi hàm và truyền tham số, vùng nhớ này được gọi là Stack với cơ chế truy xuất rất đặc biệt: chỉ cho phép ghi dữ liệu vào đỉnh stack và chỉ cho phép đọc dữ liệu từ đỉnh stack, ta nói cách truy xuất này là LIFO (Last-in First-out), nghĩa là dữ liệu nào mới được ghi vào sau cùng thì sẽ được đọc ra đầu tiên. Thường các lệnh của ngôn ngữ cấp cao không cho phép truy xuất trực tiếp vào Stack.
- Vùng nhớ chứa dữ liệu tĩnh của chương trình, vùng nhớ này chứa các biến dữ liệu được khai báo trong chương trình. Vùng này có kích thước cố định trong suốt quá trình chạy của ứng dụng.
- Vùng nhớ chứa dữ liệu động của chương trình, vùng nhớ này chứa các dữ liệu được cấp phát động (qua lệnh New, hàm malloc()...). Ta thường gọi vùng nhớ này là Heap.
- Vùng nhớ phục vụ cho việc gọi hàm và truyền tham số, vùng nhớ này được gọi là Stack với cơ chế truy xuất rất đặc biệt: chỉ cho phép ghi dữ liệu vào đỉnh stack và chỉ cho phép đọc dữ liệu từ đỉnh stack, ta nói cách truy xuất này là LIFO (Last-in First-out), nghĩa là dữ liệu nào mới được ghi vào sau cùng thì sẽ được đọc ra đầu tiên. Thường các lệnh của ngôn ngữ cấp cao không cho phép truy xuất trực tiếp vào Stack.
Trả lời câu hỏi
Câu hỏi lĩnh vực Lập trình
Rao vặt Siêu Vip