|
|
1
4
单元测试的预期是错误的。它(或它测试的代码)不应该逐字节扫描结构的缓冲区。对于字节精确数据,代码应该在堆栈或堆上显式地创建字节缓冲区,并用每个成员的摘录填充它。通过对整数值使用右移位操作并通过字节类型(如(无符号字符)强制转换结果,可以以与CPU端号无关的方式获得提取。 顺便说一句,你的代码片段写过s2。你可以通过改变这个来解决这个问题
但结果在技术上是“未定义的”,因为结构中的成员对齐是特定于编译器的。 |
|
|
2
2
|
|
|
3
1
我们所做的是使用#pragma pack指定对象的大小:
|
|
|
4
1
请注意,这不是一个“奇怪”的对齐问题。MSVC选择确保结构在64位边界上对齐,因为它有一个64位成员,所以它在结构的末尾添加了一些填充,以确保这些对象的数组中的每个元素都正确对齐。事实上,我很惊讶GCC没有这样做。
|
|
|
5
1
给出强制对齐的编译器指令的步骤 或者进入项目选项并更改默认结构对齐方式[在代码生成下] |
|
|
6
0
请注意,显式填充到64位对齐只会隐藏问题。如果您开始天真地嵌套结构,它就会回来,因为编译器仍然会对内部结构的自然对齐方式产生分歧。 |
|
|
wavesinaroom · 断言结构向量长度 1 年前 |
|
|
Tim Kirkwood · 比较空数据帧 1 年前 |
|
Kamran Khan · 使用单元测试ASP。NET核心 2 年前 |
|
|
paymer · 为什么我的代码没有删除我的单元测试生成的zip文件? 2 年前 |
|
|
Ricky Mo · 角度测试如何模拟导入的const 2 年前 |
|
|
Natty · Visual Studio中缺少“代码覆盖率结果” 2 年前 |