您的位置:首页 > 编程语言

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

2013-07-05 11:15 411 查看
目前正在将一个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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: