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
}
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
}
相关文章推荐
- C/C++ 32位机器和64位机器 差异问题总结 跨平台 移植问题 语言编程需要注意的64位和32机器的区别
- 32位C/C++程序移植到64位系统时需要注意的问题
- 语言编程需要注意的64位和32位机器的区别
- 关于32位程序在64位系统下运行中需要注意的重定向问题(有图有真相)(***)
- 32位C/C++程序移植到64位系统时需要注意的问题
- 关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)
- 在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的
- 32位与64位编程注意事项总结
- 32位程序移植到64位需要考虑的问题
- java-面试- Java并发编程(一)——并发编程需要注意的问题
- 使用VS2005开发64位驱动程序需要注意的一些问题
- 在编程过程中需要注意的火狐和IE兼容性问题和解决方法
- 在64位的环境中使用VS建立Web项目进行Oracle连接需要注意WebDev是32位的
- 几个Android编程时需要注意的 web 问题
- 多线程编程需要注意的问题
- 【asm】64位编译32位汇编需要注意的
- 【读书笔记】并发编程需要注意的几个典型问题
- win32,win64编程永恒;语言编程需要注意的64位和32机器的区别
- C语言编程需要注意的64位和32机器的区别