[英]How to create std::vector of char/std::byte where first byte is aligned to 16 byes, but there is no padding?
有一個問題需要C ++ 03並且沒有答案,所以我將打開一個新問題。
我遇到的問題是我想要std::vector
的std::byte
,但是.data()
(數據數組的第一個元素)是16字節對齊的。
包裝char上的alignas
沒有幫助,因為我不想在數組中有對齊間隙。 換句話說,我想對元素進行1對齊,但我希望對齊數組16。
理想情況下,我想避免使用自定義分配器。 如果有任何TBB或增強矢量可以做我想要的那樣也會很棒。
默認情況下不提供對齊矢量中的數據。 甚至沒有對齊的課程。
做對齊的最佳方法是使用boost的aligned_allocator 。
不幸的是,它不會阻止填充,它甚至可以根據對齊方式調整指針。 從C ++ 17開始,它可以使用對齊的new (參見std::aligned_val_t
重載)。 但是,我見過的所有實現實際上都使用相同的技巧。
另一種方法是一次分配整個頁面,並使用自定義分配器進行自己的內存管理。 您可以這樣做,但可能需要花費大量時間才能正確完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.