Trang tài liệu
Khóa học C++ nền tảng
Chương 6. Con trỏ và tham chiếu
Mô hình bộ nhớ trong C++

Mô hình bộ nhớ trong C++

Mô hình bộ nhớ trong C++ xác định cách chương trình lưu trữ và truy cập dữ liệu trong bộ nhớ máy tính. Nó bao gồm các phân đoạn khác nhau, chẳng hạn như phân đoạn Ngăn xếp, Đống, Dữ liệu và Mã code. Mỗi phân đoạn này được sử dụng để lưu trữ các loại dữ liệu khác nhau và có các đặc điểm cụ thể.

Bộ nhớ ngăn xếp

Bộ nhớ ngăn xếp được sử dụng cho các biến thời lượng lưu trữ tự động, chẳng hạn như các biến cục bộ và dữ liệu lệnh gọi hàm. Bộ nhớ ngăn xếp được trình biên dịch quản lý và việc phân bổ cũng như hủy phân bổ được thực hiện tự động. Bộ nhớ ngăn xếp cũng là cấu trúc dữ liệu LIFO (Last In First Out), nghĩa là dữ liệu gần đây nhất được cấp phát là dữ liệu đầu tiên được hủy cấp phát.

void functionExample() {
    int x = 10; // x được lưu trữ trong bộ nhớ ngăn xếp
}

Bộ nhớ heap

Bộ nhớ heap được sử dụng cho các biến thời lượng lưu trữ động, chẳng hạn như các đối tượng được tạo bằng từ khóa new. Lập trình viên có quyền kiểm soát việc phân bổ và giải phóng bộ nhớ heap bằng cách sử dụng các toán tử new và delete. Bộ nhớ heap là vùng bộ nhớ lớn hơn ngăn xếp, nhưng có thời gian truy cập chậm hơn

void functionExample() {
    int* p = new int; // cấp phát động int trong bộ nhớ heap
    *p = 10;
    // thêm mã code
    delete p; // giải phóng bộ nhớ
}

Phân đoạn dữ liệu

Phân đoạn dữ liệu bao gồm hai phần: phân đoạn dữ liệu được khởi tạo và phân đoạn dữ liệu chưa được khởi tạo. Phân đoạn dữ liệu đã khởi tạo lưu trữ các biến toàn cục, tĩnh và hằng số với các giá trị ban đầu, trong khi phân đoạn chưa khởi tạo lưu trữ các biến toàn cục và tĩnh chưa được khởi tạo.

// Đoạn dữ liệu khởi tạo
int globalVar = 10; // biến toàn cục
static int staticVar = 10; // biến cục bộ tĩnh
const int constVar = 10; // biến hằng có giá trị

// Đoạn dữ liệu chưa khởi tạo
int globalVar; // các biến toàn cục chưa được khởi tạo

Đoạn mã code

Đoạn mã Code (còn được gọi là đoạn Văn bản) lưu mã thực thi (mã máy) của chương trình. Nó thường nằm trong vùng chỉ đọc của bộ nhớ để ngăn việc vô tình sửa đổi.

void functionExample() {
    // Mã máy cho hàm này được lưu trữ trong đoạn mã code.
}

Tóm lại, việc hiểu mô hình bộ nhớ trong C++ giúp tối ưu hóa việc sử dụng tài nguyên bộ nhớ và cải thiện hiệu suất tổng thể của chương trình.