1

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

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

让我介绍一下实际问题,这与缓存有关,我们在 ram 上的大小有限,即 32 位空间,所以如果我们在 ram 上有 1G 空间并且我的单个缓存对象的结构大小是 1M 那么数字我可以存储的对象限制为 1G/1M。因此,为了解决这个问题,我想在 64 位空间中声明我的结构(这样就没有空间紧缩),并且对象的数量实际上可以增加到无限

假设我们有一个 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 或 xa 一样被访问,我如何确保相同的值被传输到 64 位结构,而不改变整个代码的功能。

一种方法是在 64 位空间中有一个缓冲区,对于 32 位空间中的变量的每次访问,都会对缓冲区进行 64 次写入/读取。但这是一个乏味的过程,有没有其他的选择??

4

1 回答 1

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
于 2013-07-31T08:26:29.070 回答