2013-07-25 34 views
8

Trong khi đọc sách trên C++ và thư viện chuẩn, tôi thấy các tham chiếu thường xuyên đến các trình phân bổ.Nhà phân bổ là gì và khi nào thì việc sử dụng chúng cần thiết?

Ví dụ, C++ chuẩn Thư viện Nicolai Josuttis của thảo luận một cách chi tiết trong chương cuối cùng, và cả hai mục 10 ("được nhận thức của công ước allocators' & hạn chế ') và 11 (' hiểu việc sử dụng hợp pháp của khách hàng phân bổ ") trong số hiệu quả STL của Scott Meyers về việc sử dụng chúng.

Câu hỏi của tôi là, các nhà phân bổ đại diện cho một mô hình bộ nhớ đặc biệt như thế nào? Quản lý bộ nhớ STL mặc định có đủ không? Khi phân bổ nên được sử dụng thay thế?

Nếu có thể, vui lòng giải thích bằng ví dụ về mẫu bộ nhớ đơn giản.

+0

Có thể liên quan: [Các ví dụ hấp dẫn về các trình phân bổ C++ STL tùy chỉnh?] (Http://stackoverflow.com/q/826569) –

Trả lời

8

Trình phân bổ tóm tắt phân bổ bộ nhớ thô và xây dựng/hủy các đối tượng trong bộ nhớ đó.

Trong hầu hết các trường hợp, Trình phân bổ mặc định hoàn toàn ổn. Tuy nhiên, trong một số trường hợp, bạn có thể tăng hiệu quả bằng cách thay thế nó bằng một thứ khác. Ví dụ cổ điển là khi bạn cần/muốn phân bổ một số lượng lớn các đối tượng rất nhỏ. Hãy xem xét, ví dụ, một vectơ của các chuỗi mà mỗi chuỗi có thể chỉ là một tá byte hoặc hơn. Trình phân bổ bình thường sử dụng operator new, có thể áp đặt chi phí khá cao cho các đối tượng nhỏ như vậy. Tạo một trình phân bổ tùy chỉnh phân bổ một đoạn bộ nhớ lớn hơn, sau đó chia nhỏ nó khi cần thiết có thể tiết kiệm khá nhiều bộ nhớ và thời gian.

Các vấn đề liên quan