Bộ nhớ: Stack vs Heap & Con trỏ
Quảng cáo • Advertisement
📢 Sponsor Ad
Google AdSense
lesson.content.title
lesson.content.subtitle
🎯 Bí mật phòng ngủ của CPU: Stack & Heap
Code chạy chậm? App bị crash? RAM đỏ lòm? 99% nguyên nhân là do bạn không hiểu cách CPU "xếp hình" dữ liệu.
1. Stack (Ngăn xếp) - "Cái Balo du lịch"
Hãy tưởng tượng Stack là cái balo bạn đeo sau lưng.
- Đặc điểm: Nhỏ, gọn, lấy ra cất vào cực nhanh.
- Chứa gì: Những thứ nhỏ nhẹ, biết rõ kích thước (Số nguyên
int, Đúng saibool, Ký tựchar). - Cơ chế: LIFO (Vào sau ra trước). Hàm chạy xong là dọn sạch sẽ -> Tự động.
- Giới hạn: Balo có hạn. Nhét nhiều quá (Đệ quy vô tận) -> Rách balo -> Stack Overflow.
🖼️ Minh họa:
Stack (Ngăn nắp) Heap (Lộn xộn)
+-----------+ +-----------------+
| int a = 5 | | Obj "Lulu" |
| int b = 10| ---> | Obj "KiKi" |
| Ref d1 | ------- | [Img 10MB] |
+-----------+ +-----------------+
2. Heap (Đống) - "Cái Nhà Kho lộn xộn"
Heap là cái nhà kho khổng lồ sau nhà.
- Đặc điểm: Rộng mênh mông, nhưng lộn xộn, tìm đồ hơi lâu.
- Chứa gì: Những thứ to xác, cồng kềnh (Object, Array, Danh sách sinh viên, Ảnh, Video).
- Cơ chế: Muốn dùng phải xin phép (
new Object()). Dùng xong phải tự dọn (C/C++) hoặc thuê lao công dọn hộ (Garbage Collector trong Java/JS). - Giới hạn: Nhà kho đầy -> Hết chỗ chứa -> Out Of Memory.
3. Tham trị (Value) vs Tham chiếu (Reference) - Cú lừa thế kỷ
Câu đố 1: Copy kiểu Balo (Stack)
int a = 10;
int b = a; (Copy a sang b)
b = 99;
// Hỏi: a bằng mấy?
👉 Đáp án: a = 10.
Giải thích: Trong Balo, a và b là 2 tờ giấy nháp riêng biệt. Bạn sửa tờ b không ảnh hưởng tờ a.
Câu đố 2: Copy kiểu Nhà Kho (Heap)
Dog d1 = new Dog("Lulu");
Dog d2 = d1; (Copy d1 sang d2)
d2.setName("KiKi");
// Hỏi: d1 tên gì?
👉 Đáp án: d1 tên là "KiKi"!!! 😱
Giải thích: d1 không phải con chó, d1 là cái CHÌA KHÓA kho. Khi gán d2 = d1, bạn đang copy cái chìa khóa.
Giờ 2 thằng cầm 2 chìa khóa mở chung 1 căn phòng. Thằng d2 vào sơn phòng màu đỏ, thằng d1 mở cửa ra cũng thấy màu đỏ.
4. Memory Leak (Rò rỉ bộ nhớ)
Tương đương với việc bạn thuê phòng khách sạn (new) xong bỏ đi mà không trả chìa khóa (mất tham chiếu).
Khách sạn (RAM) tưởng bạn vẫn ở, không dám dọn phòng. Lâu ngày hết phòng -> Khách sạn phá sản (Crash App).
Quảng cáo • Advertisement
📢 Ad Space
Google AdSense