Tôi đã cố gắng để có được đầu của tôi xung quanh việc bổ sung TR1 được gọi là aligned_storage. Trong khi đọc các tài liệu sau đây N2165, N3190 và N2140 Tôi không thể cho cuộc sống của tôi nhìn thấy một tuyên bố mà nó mô tả rõ ràng ngăn xếp hoặc đống bản chất của bộ nhớ đang được sử dụng.Mục tiêu phân bổ của tiêu chuẩn :: aligned_storage (stack hoặc đống?)
Tôi đã xem xét triển khai được cung cấp bởi msvc2010, tăng và gcc tất cả đều cung cấp giải pháp dựa trên ngăn xếp tập trung xung quanh việc sử dụng liên minh.
Nói tóm lại:
là loại bộ nhớ (chồng hoặc đống) được sử dụng bởi aligned_storage thực hiện xác định hoặc là nó luôn luôn có nghĩa là để được ngăn xếp dựa?
và, Tài liệu cụ thể xác định/xác định điều đó là gì?
Lưu ý: Trong MSVC10, sau đây là định nghĩa của các loại aligned_storage, trong trường hợp này nếu aligned_storage là một biến tự động dữ liệu (_Val, _Pad) được tạo ra trên stack:
template<class _Ty, size_t _Len>
union _Align_type
{
// union with size _Len bytes and alignment of _Ty
_Ty _Val;
char _Pad[_Len];
};
Lưu ý: Đây là NOT một câu hỏi nhỏ. Hãy thử và hiểu câu hỏi trước khi đăng câu trả lời.
Tôi không chắc câu trả lời có thể cải thiện hơn điều này không. Điều gì sẽ là điểm nếu dữ liệu được phân bổ động trong 'loại'? Làm thế nào mà có thể có thể được giúp đỡ về sự liên kết? – icecrime
@Zenikoder - chỉ đọc báo giá từ Standard một lần nữa. Và một lần nữa, nếu cần thiết. :) 'std :: aligned_storage <...> :: type' xác định loại POD có căn chỉnh được yêu cầu. Bạn có thể cấp phát bộ nhớ cho loại này trên ngăn xếp hoặc trong heap, nó không có liên quan. – atzz
@Zenikoder - nó không được thực hiện xác định. Nó do người dùng định nghĩa. Tuyên bố được trích dẫn bởi James giải thích mọi thứ đủ rõ ràng. – atzz