将64位代码移植到32位机器

时间:2013-06-21 16:08:56

标签: c x86-64 porting i386

我见过很多人要求从32位到64位的机器上移植问题。但是在64位到32位上编写端口代码并不常见。我试图在C中将插件从64位移植到32位,但在存储void *到64位整数的情况下面临类似的问题,反之亦然。

更改代码应该是什么方法,以便相同的代码适用于(i386和x86_64)两台机器?我不认为在32位机器上使用uint64_t *代替32位的void *是有意义的吗?这种情况是否存在一些通用方法?

2 个答案:

答案 0 :(得分:0)

指针永远不应存储在固定大小的整数中。如果需要将指针存储在整数类型中,则正确的类型为uintptr_t,但实际上您根本不应该将指针存储在整数对象中。 然而,使用过大的整数类型并没有什么坏处;它会浪费一点点记忆。因此,如果在uint64_t中存储指针是代码中唯一的问题,那么它应该可以很好地编译为32位目标。

答案 1 :(得分:0)

如您所知,您可以为32位和64位架构编写一个源代码,其中包含一系列“#define”,“#ifdef”等预处理器指令。您需要为32位和64位编译源一次。这可能是这样的。

test.c示例代码

#ifdef ARCH_64
    typedef UINT unit64_t;
#else
    typedef UINT unit32_2;

UINT  *my_uint_ptr;

$ gcc -m32 test.c

$ gcc -m64 -DARCH_64 test.c

相关问题