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

将32位代码向64位平台移植

2015-11-02 19:36 218 查看
2015-11-2 16:09:53 周一

将32位代码向64位平台移植,怎么弄?

是不是只要将32位的代码重新编译成64位的二进制可执行文件就行了吗?

32位跟64位程序有什么不一样的?

32位环境涉及”ILP32”数据模型,是因为C数据类型为32位的int、long、指针。而64位环境使用不同的数据模型,此时的long和指针已为64位,故称作”LP64”数据模型。

现今所有64位的类Unix平台均使用LP64数据模型,而64位Windows使用LLP64数据模型,除了指针是64位,其他基本类型都没有变。在此主要探讨ILP32到LP64的移植问题。

c语言数据模型ILP32、LP64的对比:



向64位移植代码时的所有问题差不多都可以总结出一个简单的规律:

不能把int、long、指针的长度一样。如何违反这条规律的代码,当运行在LP64数据模型下时,都会出现不同的问题,而且很难找出原因所在。

char *a[20];
char *p = a;
int i = (int)p;
printf("i = %p, p = %p\n", i, p);


32位移植到64位时,会出现截断的情况。

因此要注意指针类型的使用,尽量类型对应类型的使用,

尽量减少将指针类型强转成int类型之类的,会产生截断。

另外还有其他指针计算时,使用sizeof,尽量使用指针长度用4或8来运算的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: