对齐陷阱(在进行memcpy时)

时间:2018-10-25 07:57:01

标签: c arm

我确实使用memcpy(取决于参数)警告/错误:对齐陷阱

我这样理解,指针未对齐。但是在我的特殊情况下,奇怪的是u8 *。 而且,有时会有此消息,有时则没有。看来memcp本身工作正常(因此结果似乎还可以)。 没事的时候我看不到巧合,什么时候没?!?

u32 pictureCopy(u8 *to, u32 *from)
{
  u32 expected_size;
  u8 *source;
  u8 *target;
  u32 *counter;
  u32 *size;
  ....
  counter = from-2;
  size = from-1;

    source = (u8 *)from;
    target = to;

    for (int i=0; i<expected_size/2 ; i+= saved_image_setting2.width) {
      printf("\n# i, target, source, size %i, %p, %p, %i\n", i, &target[i], &source[i], saved_image_setting2.width);
      sleep(1);
      memcpy(&target[i], &source[i], saved_image_setting2.width);
      sleep(1);
      printf("\nend %i\n", i);
    }

输出是这样的:

# i, target, source, size 0, 0xb500800a, 0xb5cf2008, 84
Alignment trap: sps (1493) PC=0xb6e1ced4 Instr=0x14913004 Address=0xb5cf2056 FSR 0x011
end 0
#i, target, source, size 84, 0xb500805e, 0xb5cf205c, 84
end 84

## i, target, source, size 168, 0xb50080b2, 0xb5cf20b0, 84
Alignment trap: sps (1493) PC=0xb6e1ced4 Instr=0x14913004 Address=0xb5cf20fe FSR 0x011
end 168
## i, target, source, size 252, 0xb5008106, 0xb5cf2104, 84
end 252

看指针,第一个指针始终不是4的倍数,而第二个指针总是。长度是一样的!我不明白这是什么问题,这两行之间有什么区别。

使用valgrind进行测试无法提供任何线索。 valgrind --leak-check =是

0 个答案:

没有答案