如果{
"type":"record",
"namespace":"com.mycompany",
"name":"JPEG",
"fields":[
{
"name":"TheBytes",
"type":"bytes"
},
]
}
不是4的倍数。访问剩余的几个字节可能很尴尬
我想通过读取4字节变量中剩余的1,2或3个字节来优化它,然后屏蔽掉我不需要的字节。
这不应该给出例外,因为块应该在dword(或更大)对齐的块中分配。
让我举个例子:
SizeOf(datastructure)
这样安全还是会让我遇到麻烦?
答案 0 :(得分:4)
这是安全的,当且仅当它有效读取数据末尾超过4的倍数。如果字节数组保存在整数数组中,那么你没事。如果它实际上保存在字节数组中,那么你可能正在读取缓冲区的末尾。
我的意思是,虽然你的函数接受PInteger
,但为了方便起见,这可能是为了解决数组问题。如果函数的调用者在调用站点将PByte
强制转换为PInteger
,那么至少可以从数组的末尾读取并可能遇到运行时内存故障。< / p>
你提到优化的愿望正在推动这一点。我不确定哈希计算的最后一步是否需要优化。循环是您承担成本的地方。我怀疑你使用Move
执行一个乱码字节副本到一个整数变量会受到很大的影响。如果你真的想要优化,可以将3分为2然后分为1,然后可以通过寄存器访问来处理2和1。