簡體   English   中英

如何創建char / std :: byte的std :: vector,其中第一個字節與16個字節對齊,但是沒有填充?

[英]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::vectorstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM