64位与32位处理器编程的差异和需要注意的问题

来源:互联网 发布:湖北大学知行学院学分 编辑:程序博客网 时间:2024/04/26 10:54

目前正在将一个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