Chuẩn C++ 11 mới yêu cầu triển khai STL để hỗ trợ các bộ phân bổ stateful trong các thùng chứa. Thực hiện STL chính (Visual Studio 2008, 2010, libstdC++) có tuân thủ yêu cầu này ngay bây giờ không? Tôi không tìm thấy gì về điều này trong MSDN hoặc trong tài liệu libstdC++.hỗ trợ trình biên dịch cho các bộ phân bổ stateful trong các thùng chứa STL
Trả lời
Hình như các tính năng của allocators stateful trong STL container được hỗ trợ rộng rãi rồi. Trong hầu hết các trường hợp statefullness của cấp phát không gây rắc rối. Những gì không được hỗ trợ rộng rãi được nêu ra là cách tiêu chuẩn mới để xử lý các tình huống có vấn đề (trao đổi một container (cho dù để trao đổi các phân bổ quá), mối nối của danh sách).
This thread nói:
trong mã đối với hầu hết các thư viện tiêu chuẩn hiện hành (bao gồm cả Dinkumware như được sử dụng bởi MS), allocators stateful được hỗ trợ
This tread (libstdC++, 2004) nói (nếu tôi hiểu đúng):
Chúng tôi đã hỗ trợ người phân bổ ở đâu
l1.get_allocator() != l2.get_allocator()
. Những gì chúng tôi không làm là thực hiện bất kỳ điều khoản đặc biệt nào để phát hiện những người phân bổ đó theo sốsplice()
vàswap()
.
This blog entry (libstdC++, 2009) nói:
container hiện trong chế độ C++ 0x hiện nay có hiệu quả hơn cùng với allocators stateful (tức là, không allocators được tạo ra khi đang bay vào thời điểm xây dựng yếu tố).
This document nói về mới libc++ library:
Tất cả container đáp ứng tất cả các yêu cầu cấp phát mới nhất mà hỗ trợ đầy đủ allocators stateful. - Không gian cho người phân bổ không trạng thái được tối ưu hóa.
EASTL hỗ trợ cấp phát trạng thái.
This thread chứa tranh chấp thú vị về mức độ di động của tính năng này. Vì vậy, hầu hết các triển khai STL đều hỗ trợ các trình phân bổ statefull, có nghĩa là chúng không tạo ra các thể hiện bổ sung của kiểu phân bổ dưới mui xe, nhưng lưu trữ cá thể cấp phát do máy khách cung cấp và tất cả các phân bổ/deallocations được thực hiện thông qua đó. Tuy nhiên, cách họ xử lý ping swap
và list::splice
không có giấy tờ, không di động.
CẬP NHẬT: STL của VS2008 yêu cầu người cấp phát phải có trình tạo bản sao được tạo khuôn mẫu, IMO làm cho việc sử dụng phân bổ tùy chỉnh quan trọng nhất là không thể: lưu trữ riêng biệt đơn giản.
Đối với bất kỳ ai không hài lòng với trạng thái hiện tại của nhà phân bổ nhà nước trong STL, tôi khuyên bạn nên xem xét Boost.Intrusive
và Boost.Container
.
Trên thực tế các thư viện chuẩn _all_ yêu cầu các trình phân bổ để có một constructor sao chép theo khuôn mẫu và mẫu 'rebind' và sử dụng chúng. Điều này là do tất cả các container ngoại trừ 'vector' và' deque' phân bổ các phần tử là một phần của một số cấu trúc được định nghĩa thực hiện, do đó chúng phải tạo cấp phát cho cấu trúc đó từ cấp phát được cung cấp. Đó là một điều tác giả cấp phát chỉ đơn giản là phải đưa vào tài khoản. –
g ++ does not hỗ trợ phân bổ phạm vi.
VS2010 supportes nhất định allocators phi tiêu chuẩn but not apparently the standard ones
Phân bổ phạm vi! = Stateful allocator –
- 1. Các lớp chứa STL được hỗ trợ đĩa?
- 2. Eclipse CDT không thể phân tích cú pháp các phương thức trên các phần tử trong các thùng chứa STL
- 3. Trình biên dịch hỗ trợ C11
- 4. Hỗ trợ trình biên dịch cho sắp tới C++ 0x
- 5. hỗ trợ Copy-on-viết trong STL
- 6. Thay thế phân bổ STL mặc định
- 7. Phân bổ bộ nhớ hồ sơ bằng Python (với hỗ trợ cho mảng Numpy)
- 8. Các khối Objective-C có được hỗ trợ bởi các trình biên dịch trên Linux không?
- 9. Các phân bổ tùy chỉnh trong STL chỉ phân bổ dữ liệu thực tế?
- 10. Trạng thái của C99 hỗ trợ trong các trình biên dịch/công cụ chính là gì?
- 11. Biên dịch ghc với hỗ trợ -fPIC
- 12. Trình biên dịch PHP cho các cửa sổ
- 13. Có thùng chứa được sắp xếp trong STL
- 14. Có trình biên dịch nào hỗ trợ constexpr chưa?
- 15. đồ STL chứa tài liệu tham khảo không biên dịch
- 16. Liệu std :: vector có đáp ứng các yêu cầu vùng chứa cho các trình phân bổ Boost.Interprocess không?
- 17. php với hỗ trợ readline được biên dịch cho windows
- 18. Trình biên dịch C++ hỗ trợ tất cả các tính năng đồng thời C++ 11?
- 19. RTA đa nhiệm Ada được hỗ trợ với các trình biên dịch mã nguồn mở
- 20. Tăng cường :: tinh thần :: qi để sử dụng các thùng chứa stl
- 21. Sử dụng phân bổ bộ nhớ động cho các mảng
- 22. Trình biên dịch C++ hỗ trợ các tính năng C++ 0x?
- 23. Các tiêu đề chuyển tiếp cho các hộp chứa STL
- 24. Tại sao bộ phân bổ C++ STL này không phân bổ?
- 25. Làm thế nào các trình biên dịch C++ có thể hỗ trợ C++ 11 nguyên tử, nhưng không hỗ trợ mô hình bộ nhớ C++ 11
- 26. Con trỏ có được phép làm khóa trong các thùng chứa STL đã đặt hàng không?
- 27. Các thùng chứa nào trong Java
- 28. Chia thùng chứa thành các khối, C++
- 29. biên dịch vim với hỗ trợ python trên Ubuntu
- 30. Làm thế nào bạn có thể thực hiện C++ khi trình biên dịch nhúng của bạn không hỗ trợ toán tử mới hoặc STL?
Bạn có muốn chấp nhận một trong các câu trả lời này không? – spraff