我见过很多人要求从32位到64位的机器上移植问题。但是在64位到32位上编写端口代码并不常见。我试图在C中将插件从64位移植到32位,但在存储void *到64位整数的情况下面临类似的问题,反之亦然。
更改代码应该是什么方法,以便相同的代码适用于(i386和x86_64)两台机器?我不认为在32位机器上使用uint64_t *代替32位的void *是有意义的吗?这种情况是否存在一些通用方法?
答案 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