Xem thêm

Bộ nhớ động trong C++: Sự cần thiết và cách sử dụng hiệu quả

Huy Erick
Một lập trình viên C/C++ giỏi cần hiểu một cách sâu sắc về cách bộ nhớ động hoạt động trong ngôn ngữ này. Trong C/C++, bộ nhớ được phân thành hai phần chính: Stack và...

Một lập trình viên C/C++ giỏi cần hiểu một cách sâu sắc về cách bộ nhớ động hoạt động trong ngôn ngữ này. Trong C/C++, bộ nhớ được phân thành hai phần chính: Stack và Heap.

Stack và Heap: Hai phần của bộ nhớ trong C/C++

  • Stack: Được sử dụng để lưu trữ các biến được khai báo bên trong một hàm trong C/C++. Việc phân công bộ nhớ cho các biến trên Stack sẽ được thực hiện tự động.
  • Heap: Dùng để cấp phát bộ nhớ động trong quá trình chạy chương trình. Kích thước của bộ nhớ cần thiết có thể được quyết định tại thời điểm thực thi.

Trong nhiều trường hợp, chúng ta không biết trước kích thước bộ nhớ mà chúng ta cần để lưu trữ thông tin cụ thể trong một biến đã được định nghĩa. Và kích thước bộ nhớ cần thiết có thể được xác định tại thời điểm chạy. Để giải quyết vấn đề này, chúng ta có thể cấp phát bộ nhớ động từ Heap cho biến đó bằng cách sử dụng toán tử đặc biệt new trong C/C++.

Sử dụng toán tử new và delete trong C/C++

Toán tử new trong C/C++ được sử dụng để cấp phát bộ nhớ động cho bất kỳ kiểu dữ liệu nào. Cú pháp chung của toán tử new như sau:

new kiểu_dữ_liệu;

Ở đây, kiểu_dữ_liệu có thể là bất kỳ kiểu dữ liệu có sẵn nào hoặc các kiểu dữ liệu người dùng tự định nghĩa như lớp hoặc cấu trúc. Ví dụ, chúng ta có thể định nghĩa một con trỏ tới kiểu double và yêu cầu cấp phát bộ nhớ tại thời điểm chạy như sau:

double* conTro = NULL; conTro = new double;

Nếu bộ nhớ động không cần thiết nữa, chúng ta có thể giải phóng bộ nhớ đã được cấp phát trước đó bằng toán tử delete trong C/C++, như sau:

delete conTro;

Điều quan trọng là chúng ta phải nhớ giải phóng bộ nhớ đã cấp phát bằng toán tử delete để tránh lãng phí bộ nhớ.

Cấp phát bộ nhớ động cho mảng và đối tượng trong C/C++

Trong C/C++, chúng ta có thể cấp phát bộ nhớ động cho mảng và đối tượng theo cách tương tự như đã trình bày ở trên:

  • Cấp phát bộ nhớ động cho mảng:

    kiểu_dữ_liệu* conTro = NULL; conTro = new kiểu_dữ_liệu[số_lượng_phần_tử];
  • Xóa mảng đã cấp phát:

    delete[] conTro;
  • Cấp phát bộ nhớ động cho đối tượng:

    class TenLop { ... }; TenLop* conTro = new TenLop;
  • Xóa đối tượng đã cấp phát:

    delete conTro;

Tóm tắt

Việc hiểu về cách bộ nhớ động hoạt động trong C/C++ là một yếu tố cốt yếu để trở thành một lập trình viên thành thạo ngôn ngữ này. Bằng cách sử dụng toán tử newdelete chính xác và hiệu quả, chúng ta có thể quản lý bộ nhớ động một cách an toàn và tránh lãng phí bộ nhớ.

Bộ nhớ động trong C++ Hình ảnh minh họa bộ nhớ động trong C++

Theo Tutorialspoint

1