Hàm calloc và malloc
Khi cần một số lượng ô nhớ không biết trước được như lúc nhập dữ liệu từ bàn phím hoặc đọc file, ta cần một cách để quản lý bộ nhớ động. Trong thư viện stdlib
(standard library) có hai hàm cấp phát bộ nhớ động đó là calloc
và malloc
.
|
|
Hai hàm calloc
và malloc
gần như không có gì khác nhau ngoại trừ số lượng tham số truyền vào. Khi số lượng ô nhớ không thể cấp phát được do một lý do nào đó thì hàm này sẽ trả về con trỏ NULL
. Vì vậy việc kiểm tra giá trị trả về của con trỏ là rất quan trọng.
|
|
Hàm free
Dữ liệu của các ô nhớ cấp phát tiếp tục tồn tại đến khi nào chúng ta giải phóng nó qua hàm free
. Hàm free
chỉ được gọi một lần duy nhất với mỗi ô nhớ được cấp phát. Nếu không sử dụng hàm free
khi không cần sử dụng đến ô nhớ đó thì chương trình sẽ chiếm tài nguyên của máy tính một cách không thiết - hay còn được gọi là rò rỉ bộ nhớ (memory leak).
|
|
Bộ nhớ Heap và Stack
Trong chương trình C có hai loại bộ nhớ Heap và Stack. Bộ nhớ stack do chương trình quản lý khi cần có một số lượng bytes định trước. Bộ nhớ Stack là bộ nhớ mà được chúng ta quản lý khi chỉ biết kích thước cần dùng đến lúc chạy chương trình. Bộ nhớ Stack này sẽ được chương trình giải phóng khi không cần thiết.
Bộ nhớ Heap là bộ nhớ khi không biết trước số lượng ô nhớ. Các hàm calloc
và malloc
sẽ tạo các ô nhớ trên Heap. Trong ngôn ngữ C không quản lý việc giải phóng ô nhớ này vào lúc nào nên chúng ta sẽ làm việc đó thủ công qua hàm free
.