现在的位置: 首页 > 综合 > 正文

C代码从IA32环境到IA64环境的移植。

2013年05月06日 ⁄ 综合 ⁄ 共 627字 ⁄ 字号 评论关闭

毕设的时候搞了这个课题,那么到底C代码从IA32到IA64移植到底有何需要修改之处呢?

[1] 首先明确一下我的IA64环境:

    安腾2 + RedHat AS3 (64bit version)

[2] 其次是关于64bit的Linux: (64bit的windows使用P64模型) 
    
    64位的Linux使用了LP64模型,在这个模型下,long 和 指针(void*) 类型都要占64bit,
    而int类型仍然保持在32bit。(而在32位下,这3个都占32bit)

[3] 具体的类型在IA64下所占的空间大小和对齐要求如下:

Type  

Size(byte)

Alignment

char

1

1

short

2

2

int

4

4

long

8

8

float

4

4

double

8

8

void *

8

8

long long

8

8

long double

10

16

归根结底,代码移植过程中要注意的主要就是如下几点:(均是和IA32下对比来说)

    a. long, int的长度不相同了。

    b. void *, int的长度不相同了。

    c. void *, long需要64位对齐。

因此在代码中将long或指针类型直接赋给int类型就不行了,会引起数据截断。

当然,在移植过程中还有其他很多要注意的问题,但是最主要的就是以上3点。

Btw: 强烈推荐使用icc编译源代码,它有一个-Wp64编译参数,可以检测代码中的32bit
     到64bit的移植问题,并会给出相应的warning,这大大的提高了移植的效率。

抱歉!评论已关闭.