Sự khác biệt cấp cao là đối tượng tuổi thọ. Ví dụ, nếu bạn đang viết một trò chơi video, bạn sẽ phân bổ các đối tượng tương ứng với quái vật trên heap, thông qua new
. Bằng cách đó, đối tượng bên dưới của quái vật sống chính xác miễn là con quái vật, điều không thể biết được khi bạn viết chương trình. Khi người chơi giết quái vật, mã của bạn có thể phá hủy đối tượng quái vật bằng cách sử dụng delete
.
Bộ đếm tổng số điểm, mặt khác, bạn sẽ sử dụng biểu mẫu khác, vì bạn biết bạn muốn bộ đếm ở lại bao lâu (có lẽ, miễn là trò chơi đang chạy!).Bằng cách đặt biểu mẫu đó trong "phạm vi toàn cầu" bên ngoài bất kỳ phần tử chức năng nào, nó sẽ được cấp phát tĩnh, như là một phần của chính chương trình nhị phân.
Cuối cùng, nếu bạn đã được tính toán tổng của một mảng, như thế này:
int mysum(int* arr, int len) {
int sum = 0;
for (int i = 0; i < len; ++i) { sum += arr[i] }
return sum;
}
biến sum
được cấp phát trên stack, mà về cơ bản là những gì bạn muốn: một biến tạm thời mà bạn không phải giải quyết một cách rõ ràng, và chỉ xung quanh khi chức năng đó thực sự đang chạy.
Nguồn
2010-05-02 01:07:18
Xem tại đây để biết thông tin về đống và ngăn xếp: http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap, http://stackoverflow.com/questions/ 408670/stack-static-và-heap-in-c –