gpt4 book ai didi

c++ - 这些整数是否未对齐,我应该关心吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:18 26 4
gpt4 key购买 nike

我有一些代码可以从任意地址的字节数组中解释多字节宽度的整数。

std::vector<uint8> m_data; // filled with data
uint32 pos = 13; // position that might not be aligned well for 8 byte integers
...

uint64 * ptr = reinterpret_cast<uint64*>(m_data.data() + pos);
*ptr = swap64(*ptr); // (swaps endianness)

对齐会成为这段代码的问题吗?如果是,这是一个严重的问题,还是可以放心忽略的问题,因为惩罚微不足道?

最佳答案

改用memcpy:

uint64_t x;
memcpy(&x, m_data.data()+pos, sizeof(uint64_t));
x = swap(x);
memcpy(m_data.data()+pos, &x, sizeof(uint64_t));

它有两个好处:

  • 您避免了严格的别名违规(由于将 uint8_t 缓冲区读取为 uint64_t 而导致)
  • 您根本不必担心未对齐(您确实需要关心未对齐,因为即使在 x86 上,如果编译器自动向量化您的代码,它也可能会崩溃)

当前的编译器足以做正确的事情(即,您的代码不会变慢,memcpy 被识别,并且会被很好地处理)。

关于c++ - 这些整数是否未对齐,我应该关心吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51588059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com