在我的网络应用程序中,在接收到的缓冲区中,我想使用偏移量作为指向已知结构的指针。使用 memcpy() 复制结构的每个字段 2 次 (rx/tx) 很繁重。我知道我在 cortex-a8 上的 gcc 4.7.2(选项:-O3)在 1 条指令中执行 memcpy(&a,&buff,4) 未对齐。因此,他可以访问未对齐的 int。假设它可能有很多结构或大结构。最好的方法是什么?
struct __attribute__ ((__packed__)) msg_struct {
int a; //0 offset
char b; //4 offset
int c; //5 offset
int d[100]; //9 offset
}
char buff[1000];// [0]:header_size [1-header_size]:header [header_size+1]msg_struct
func() {
struct msg_struct *msg;
recv ((void *)buff, sizeof(buff));
msg=buff+header_size; // so, it is unaligned.
...
// some work like:
int valueRcv=msg->c;
//or modify buff before send
msg->c=12;
send(buff,sizeof(buff));
}