linux 32位向64位的移植常见问题
2008-01-31 16:01
288 查看
1. 数据截断:
由于long类型变量的运算(赋值、比较、移位等)产生。long定义在x86上为32bits,而在ia64上为64bits.容易在与int型变量运算时出现异常。
处理方法:尽量避免不同类型变量间的运算,避免将长度较长的变量赋值到较短的变量中,统一变量长度可以解决这个问题。简单的对于32位转移到64位可以将所有long定义转换为int定义。
2. 指针存储:
在x86平台下,习惯使用int来存储指针,并将指针直接参与到int型的运算中,而64位平台下指针大小为64bits,无法存储到int中。对指针的运算也可能会因为数据长度的不一致导致异常。
处理方法:修改用于存储传递指针的变量为intptr_t 类型定义,以保证平台兼容性
3. 不规范的结构:
未命名或为指定数量的成员可能会出现异常
处理方法:命名未命名的成员,声明类型符号,将long型定义转为int型。
4. 代码中的直接数
直接使用16进制数字进行赋值时(一般会隐含假设该变量为32位变量的前提) 可能出现异常。使用数字定义数据大小,进行移位运算时会出现异常。
处理方法:检查代码中的直接数字是否有表示32位有关的各种形式,如4,32, 0x7fffffff等,替换为宏定义。
编写代码时注意可移植化:
1. 在32位与64位下使用同样的头文件
2. 使用严禁的格式定义,如:用off_t定义偏移量,用fpos_t定义文件位置, intptr_t定义指针
3. 使用<intypes.h>中定义的整数类型,不使用int,long,long long的传统定义方式。使用带有整形标示符参数的printf函数,不使用%d,%ld的格式化方式。
4. 使用固定宽度或宏定义的整数类型,数字,掩码
5. 对整形变量作边界检查。
6. 32位与64位进程共享内存操作时,使用64位作为操作字长。
由于long类型变量的运算(赋值、比较、移位等)产生。long定义在x86上为32bits,而在ia64上为64bits.容易在与int型变量运算时出现异常。
处理方法:尽量避免不同类型变量间的运算,避免将长度较长的变量赋值到较短的变量中,统一变量长度可以解决这个问题。简单的对于32位转移到64位可以将所有long定义转换为int定义。
2. 指针存储:
在x86平台下,习惯使用int来存储指针,并将指针直接参与到int型的运算中,而64位平台下指针大小为64bits,无法存储到int中。对指针的运算也可能会因为数据长度的不一致导致异常。
处理方法:修改用于存储传递指针的变量为intptr_t 类型定义,以保证平台兼容性
3. 不规范的结构:
未命名或为指定数量的成员可能会出现异常
处理方法:命名未命名的成员,声明类型符号,将long型定义转为int型。
4. 代码中的直接数
直接使用16进制数字进行赋值时(一般会隐含假设该变量为32位变量的前提) 可能出现异常。使用数字定义数据大小,进行移位运算时会出现异常。
处理方法:检查代码中的直接数字是否有表示32位有关的各种形式,如4,32, 0x7fffffff等,替换为宏定义。
编写代码时注意可移植化:
1. 在32位与64位下使用同样的头文件
2. 使用严禁的格式定义,如:用off_t定义偏移量,用fpos_t定义文件位置, intptr_t定义指针
3. 使用<intypes.h>中定义的整数类型,不使用int,long,long long的传统定义方式。使用带有整形标示符参数的printf函数,不使用%d,%ld的格式化方式。
4. 使用固定宽度或宏定义的整数类型,数字,掩码
5. 对整形变量作边界检查。
6. 32位与64位进程共享内存操作时,使用64位作为操作字长。
相关文章推荐
- linux 32位向64位的移植常见问题
- linux 32位向64位的移植常见问题
- Linux 32位向64位移植的一些问题及解决
- Linux 32位向64位移植的一些问题及解决
- 64位linux不能运行32位程序,问题解决方案
- MyEclipse 9.1 在windows x86(32位) x64(64位) ,Linux ,MacOSX的破解,并解决myeclipse 9.1 在Linux自动退出问题
- C/C++ 32位机器和64位机器 差异问题总结 跨平台 移植问题 语言编程需要注意的64位和32机器的区别
- 32位程序移植到64位需要考虑的问题
- linux64位使用xampp及常见问题
- (GPS移植三部曲)Linux下移植GPS应用程序之常见问题的分析与解决方法之二
- (GPS移植三部曲)Linux下移植GPS应用程序之常见问题的分析与解决方法之二
- 【转】一个从32位机器移植到64位机器时的c问题
- Linux-2.6.32.2在mini2440移植时常见问题
- 32位C/C++程序移植到64位系统时需要注意的问题
- 开博第一篇——32位系统部署到64位下常见问题及解决
- linux移植常见问题
- (GPS移植三部曲)Linux下移植GPS应用程序之常见问题的分析与解决方法之三
- 简图记录-linux驱动32位移植64位