使用C编程语言将结构从32位移动到64位

时间:2013-07-31 08:21:11

标签: c 32bit-64bit

我的问题是,我想将结构形式从32位空间移动到64位空间。

假设我在64位空间中使用相同的字段声明相同的结构,有没有办法将相应的字段从32位复制到64位结构?

让我向实际问题介绍,这与缓存内容有关,我们在ram上的大小有限,这是32位空间,所以如果我们在ram上有1G空间而且我的单个缓存对象的结构大小是1M那么我可以存储的对象数量限制为1G / 1M。因此,为了解决这个问题,我想在64位spcace中声明我的结构(这样就没有spcace crunch),并且实际上可以将对象的数量包含在无限

假设我们在32位空间中有一个结构

typedef struct x{
int a ;
int *b ;
} x_t;

现在我想在64位空间中移动这个结构,删除32位空间结构。

typedef struct x_64{
    int a ;
    int *b ;
    } x_64_t;

所以,如果之前我的变量被访问过像x-> b或x.a那样,我怎样才能确保将相同的值传输到64位结构,而不改变整个代码的功能。

一种方法可以是在64位空间中有一个缓冲区,对于32位空间中的每个变量访问,都要64位写入/读入缓冲区。但这是一个繁琐的过程,可以有一些替代方案吗?

1 个答案:

答案 0 :(得分:4)

如果使用兼容的数据类型,则可以在32位和64位之间复制数据。

例如,结构:

struct xyzzy {
    int a;
    int b;
}
如果您的int类型在32位和64位世界中具有不同的宽度,则

将不兼容。

C99提供了固定宽度类型,例如int32_t,无论平台如何,它们的大小都相同。如果您的编译器是兼容的,那么如果它具有该大小的实际类型,则需要提供这些类型。

如果做不到这一点,您通常可以更改源代码,以便最大限度地减少这些问题,例如:

#ifdef INT_IS_64BITS
    typedef int my_64bit_type;
#endif

#ifdef LONG_IS_64BITS
    typedef long my_64bit_type;
#endif

my_64bit_type xyzzy;

并使用合适的定义进行编译:

gcc -DLONG_IS_64BITS myprog.c