gpt4 book ai didi

c++ - boost crc 优化在 arm 上失败

转载 作者:行者123 更新时间:2023-11-30 05:10:34 26 4
gpt4 key购买 nike

我有一个为 x86 和 arm (rpi2) 编译的程序。我正在使用 boost 来实现 crc,但它在 arm 平台上失败时遇到了问题。

调试后我发现 arm 上的 crc 计算不正确。我写了这些小测试用例来查明问题:

namespace
{
unsigned char const data[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
std::size_t const data_len = sizeof(data) / sizeof(data[0]);
uint16_t const expected = 0x29B1;
}

BOOST_AUTO_TEST_CASE(test_non_optimized){
boost::crc_basic<16> crc_basic(0x1021, 0xFFFF, 0, false, false);
crc_basic.process_bytes(data, data_len);

BOOST_CHECK_EQUAL(crc_basic.checksum(), expected);
}


BOOST_AUTO_TEST_CASE(test_optimized) {
boost::crc_optimal<16, 0x1021, 0xFFFF, 0, false, false> crc_optimal;
crc_optimal.process_bytes(data, data_len);

BOOST_CHECK_EQUAL(crc_optimal.checksum(), expected);
}

BOOST_AUTO_TEST_CASE(test_function) {
uint16_t checksum = boost::crc<16, 0x1021, 0xFFFF, 0, false, false>(data, data_len);
BOOST_CHECK_EQUAL(checksum, expected);
}

所有三个测试用例都在 x86 上通过。但是在 arm 上只有 crc_basic 测试通过。其他两个失败:

test/boost_crc_test.cpp(41): check crc_optimal.checksum() == expected has failed [29299 != 10673]
test/boost_crc_test.cpp(46): check checksum == expected has failed [29299 != 10673]

boost 版本 1.63.0

编译器:gcc (GCC) 6.3.1 20170109

我很惊讶在 boost 中遇到这样的事情。关于造成这种情况的原因有什么想法吗?

最佳答案

好吧,事实证明问题只出现在 -O3 上。不适用于 -O2 或更低。

另外,将gcc升级到7.1.1 20170516也解决了问题。即使有 -O3

关于c++ - boost crc 优化在 arm 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45610446/

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