Theo tiêu chuẩn ngôn ngữ tương ứng, C cung cấp phân bổ bộ nhớ động chỉ thông qua họ malloc()
, trong khi ở C++, hình thức phân bổ phổ biến nhất được thực hiện bởi ::operator new()
. Các malloc kiểu C cũng có sẵn trong C++, và nhiều ví dụ "cấp phát đầu tiên của em bé" sử dụng nó làm chức năng phân bổ lõi, nhưng tôi tò mò về cách trình biên dịch hiện đại thực hiện toán tử sản xuất mới.Phân bổ bộ nhớ động có khác biệt trong C và C++ trong các triển khai phổ biến không?
Đây có phải là một trình bao bọc mỏng xung quanh malloc()
hoặc thực thi khác về cơ bản với hành vi phân bổ bộ nhớ khá khác với chương trình C++ điển hình so với chương trình C điển hình không?
[Edit: Tôi tin rằng sự khác biệt chính thường được mô tả như sau: Chương trình C có phân bổ ít hơn, lớn hơn và lâu hơn, trong khi chương trình C++ có nhiều phân bổ ngắn, ngắn ngủi. Cảm thấy tự do để kêu vang trong nếu đó là sai lầm, nhưng nó có vẻ như một trong những sẽ được hưởng lợi từ việc này vào tài khoản.]
Đối với một trình biên dịch như GCC nó sẽ được dễ dàng để chỉ có một phân bổ lõi đơn thực hiện và sử dụng cho tất cả có liên quan ngôn ngữ, vì vậy tôi tự hỏi liệu có sự khác biệt trong các chi tiết cố gắng tối ưu hóa hiệu suất phân bổ kết quả trong từng ngôn ngữ hay không.
Cập nhật: Cảm ơn tất cả các câu trả lời tuyệt vời! Có vẻ như trong GCC, điều này hoàn toàn được giải quyết bởi ptmalloc và MSVC cũng sử dụng malloc
ở lõi. Có ai biết làm thế nào MSVC-malloc được thực hiện?
(Tôi rất sẵn lòng nghe về các trình biên dịch không phải của GCC, nếu có ai đó có bất kỳ thông tin chi tiết nào.) –