Bộ nhớ stack và heap đều được lưu trên RAM của PC. Dưới đây là một số điểm khác nhau của stack và heap.
Stack | Heap |
|
|
|
|
|
|
Ví dụ: Minh họa stack được sử dụng khi gọi hàm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> #include <conio.h> int MAX( int , int ); void main( void ) { int a = 5, b = 7; int max = MAX(a, b); printf ( "\nMAX(%d, %d) = %d" , a, b, max); getch(); } int MAX( int a, int b) { return (a > b ? a : b); } |
Giải thích:
Trên đây là chương trình tìm giá trị lớn nhất của 2 số nguyên. Khi chạy chương trình ở chế độ debug và xem call stack trên visual studio.
Các bạn nhìn Call Stack sẽ thấy hàm main( ) gọi hàm MAX( ). Hàm main( ) và MAX( ) được lưu theo quy tắc (LIFO: last in – first out). Khi kết thúc hàm MAX( ), các thông tin lưu trữ hàm MAX( ) bị xóa, stack chỉ lưu trữ thông tin của hàm main( ). Tương tự như vậy, khi kết thúc hàm main( ), stack được xóa hoàn toàn.