【发布时间】:2012-05-26 10:59:29
【问题描述】:
我使用 arm 代码源 (arm-none-eabi-gcc) 编译了我的代码(我认为是精简版)。
我在函数中定义了一个结构变量,然后像这样做一个 memcpy
typedef struct {
char src[6];
char dst[6];
uint16_t a;
uint16_t b;
uint32_t c;
uint16_t d;
} Info_t;
Info_t Info;
memcpy(Info.src, src, sizeof(Info.src));
memcpy(Info.dst, dst, sizeof(Info.dst));
第一个 memcpy 通过,但第二个导致中止。
听说gcc优化了memcpy,导致结构访问不对齐?
我尝试将 struct 变量与单词边界等对齐,但没有成功。
谁能提供更多关于 gcc 的 memcpy 和对齐问题的详细信息。
谢谢!
【问题讨论】:
-
src和dst到memcpy的参数是什么? -
什么是
src和dst? “中止”是什么意思?你的范围重叠吗? -
会不会是
dst是NULL或无效指针? -
@KevinDTimm:我没有收到错误消息,处理器只是停止并且符号丢失了。
-
你的意思是你得到一个核心转储?如果你编译一个调试二进制文件,它应该有符号。但是,是的,这听起来像是一个未对齐的访问。不确定您的 ARM/Linux 系统,但它通常应该是 SIGBUS。