C++ buộc chúng ta phải cấp phát vùng nhớ ngay khi chạy chương trình (Compile-time allocation/Static memory allocation) khiến chương trình kém linh hoạt và sử dụng nhiều tài nguyên bộ nhớ. Automatic memory allocation (cấp phát bộ nhớ tự động) thì cấp phát bộ nhớ trong runtime khi đi vào các hàm (dành cho local variable và parameter) và bị thu hồi sau khi ra khỏi hàm. Kích thước vùng nhớ cấp phát cho static memory allocation và automatic memory allocation là rất giới hạn (phân vùng Stack trên bộ nhớ ảo) dễ gây nên stackoverflow.
Kỹ thuật Dynamic memory allocation là giải pháp cấp phát bộ nhớ tại runtime sử dụng phân vùng Heap trải qua 2 bước: yêu cầu cấp phát vùng nhớ trên Heap (bằng new operator) và lưu trữ địa chỉ của vùng nhớ vừa được cấp phát vào pointer, vùng nhớ được cấp phát sau khi sử dụng xong phải được hoàn lại bằng toán tử delete.
Kiểu trả về của toán tử new là con trỏ kiểu void (con trỏ chỉ lưu trữ địa chỉ chứ không quan trọng dữ liệu lưu trữ ở địa chỉ đó thuộc data type nào).
new int; //allocate 4 bytes on Heap partition to an int variable
new double; //allocate 8 bytes on Heap partition to a double variable
Sau đó đưa cho 2 pointer quản lý, thông qua 2 con trỏ để thay đổi giá trị bên trong vùng nhớ này
int *p_int = new int;
double *p_double = new double;
Để trả vùng nhớ về cho Heap, ta cung cấp cho toán tử delete một địa chỉ.
delete p;
Lúc này vùng nhớ được trả về nhưng giá trị lưu trong vùng nhớ còn nguyên cho đến khi hệ thống can thiệp và con trỏ p vẫn lưu trữ địa chỉ của vùng nhớ đó. Nếu ta sử dụng dereference hay delete lần nữa cho p thì sẽ trả về undefined behavior.
Trường hợp xin cấp phát trên bộ nhớ Heap thất bại, chương trình sẽ kết thúc với lỗi unhandled exception error.
int *p = new (std::nothrow) int;
Sử dụng cách xin cấp phát trên, new sẽ trả về NULL nếu thất bại.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
✓ Live Streaming✓ Interactive Chat✓ Private Shows✓ HD Quality
Anya is LIVE right now
FREE
Free to watch • No registration required • HD streaming