alloca()
cấp phát bộ nhớ trên ngăn xếp thay vì trên heap, như trong trường hợp malloc()
. Vì vậy, khi tôi trở về từ thói quen, bộ nhớ được giải phóng. Vì vậy, thực sự điều này giải quyết vấn đề của tôi về giải phóng bộ nhớ được phân bổ động. Giải phóng bộ nhớ được phân bổ thông qua malloc()
là một vấn đề đau đầu và nếu bằng cách nào đó bỏ lỡ dẫn đến tất cả các loại vấn đề bộ nhớ.
Tại sao việc sử dụng alloca()
không được khuyến khích mặc dù các tính năng trên?
free
(đó rõ ràng là một lợi thế), không có khả năng nội tuyến (rõ ràng phân bổ heap nặng hơn rất nhiều) và vv Lý do duy nhất để tránh alloca
là cho kích thước lớn. Đó là, lãng phí hàng tấn bộ nhớ ngăn xếp không phải là một ý tưởng tốt, cộng với bạn có cơ hội tràn ngăn xếp. Nếu đây là trường hợp - hãy xem xét sử dụng malloca
/freea
alloca
là ngăn xếp không thể bị phân mảnh như đống. Điều này có thể hữu ích cho các ứng dụng kiểu chạy mãi mãi trong thời gian thực hoặc thậm chí các ứng dụng quan trọng về an toàn, vì WCRU sau đó có thể được phân tích tĩnh mà không cần dùng đến các nhóm bộ nhớ tùy chỉnh với các vấn đề của riêng họ (không có địa phương tạm thời, tài nguyên tối ưu phụ sử dụng).