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

我的问题是,我想将结构forms从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或xa,我怎样才能确保将相同的值传输到64位结构,而不改变整个代码的function。

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

如果使用兼容的数据类型,则可以在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