目前正在将一个32位平台的上的软件移植到64位的处理器上来。在移植的过程中遇到了如下的几个问题,与大家共享。
1. 指针长度的差异,在32位处理器上指针的长度为4字节,在64位处理器上,指针的长度为8字节。在平台的移植过程中,出现了指针越界的问题,问题的根源在于程序中假设了指针的长度为4字节,没有考虑到代码的跨平台可移植性问题。标准的情况下,应该用sizeof取代常量假设。
sizeof(void *)
In 32-bit platform, sizeof(void *) returns 4;
In 64-bit platform, sizeof(void *) returns 8.
2. long型数据长度的差异。在32位处理器上long型数据的长度为4字节,在64位处理器上,long型数据的长度为8字节。
In 32-bit platform, sizeof(long) 4
In 64-bit platform, sizeof(long) 8
3. struct timeval 的差异。在32微处理器上,sizeof ( struct timeval ) is 8 (bytes), 在64位处理器上sizeof(struct timeval ) is 16 (bytes).
在进行pcap文件处理的时候要特别注意, 这里的timeval是8字节的,如果在64位操作系统上使用默认的timeval,在对报文进行访问的时候会有内存越界的错误。
struct pcap_pkthdr
{
struct timeval ts;
DWORD caplen;
DWORD len;
}
struct timeval
{
DWORD GMTtime;
DWORD microTime
}