最近做一个移植项目,将32位上的VPN移植到64位环境上。由于当初设计未考虑可移植性,导致移植时出现了很多的问题,其中最典型的一个问题就是通信结构带指针的问题。
场景分析:
如下的两个结构体,其中B在通信时做通信结构使用
struct A
{
int count; //链表结点数
int *b; //数据链表
void* setPoint(void *p)//设置指针,传入起始指针,返回结束指针
{
return (int*)p + count;
}
}
struct B
{
int count; //链表结点数
A *y; //A结构链表
void* setPoint(void *p) //设置指针,传入起始指针,返回结束指针
{
return (A*)p+count;
}
}
乍一看是不是很乱呢,确实,之所以在通信时使用这样的结构,是为了传送链表数据用的,也就是不固定的数据单元。
这里就不深入讨论这个结构的内存布局了,简单说一下,内存布局分为头部和尾部,头部为结构体数据,尾部为结构体所包含的链表数据。
移植分析