【发布时间】:2014-05-17 16:29:52
【问题描述】:
我正在浏览一些新的 C++14 功能,aligned_storage 引起了我的注意,在讨论了并发性、局部性和数据结构对齐之后,我想到了一个事实,即分配给std::vector 保证在内存中是连续的,但这并不一定意味着向量本身被有效打包,或者更好的说法是,您关心的数据被有效对齐,可能有额外的东西有关该数据结构的信息,这些信息不一定对计算有用,并且可能会干扰您的数据。
所以我问,如果我有一个 class T 并且我知道 T 是按照我喜欢的方式对齐和打包的,那么 std::vector<T> 是否也可以缓存友好并在管道中对齐?
我的问题涉及 C++11 和 C++14,并且仅与数据结构布局有关,我不考虑与缓存行组织相关的其他问题,例如错误共享,或与事情如何获取相关的其他问题获取、加载和执行。
我知道这听起来很傻,但我只是怀疑。
【问题讨论】:
-
你链接到的页面是 C++11。
-
@chris 有一部分说
since C++14有相关的差异。 -
你是保证
data()指向的内存由T类型的连续排列的元素组成。这还不够吗? -
我不太了解您的担忧。向量的元素由向量唯一拥有、适当对齐且连续。也许发布一些您担心的代表性代码?
-
也许this demo 有帮助?
标签: c++ caching c++11 vector memory-alignment