提问人:kharevbv 提问时间:7/31/2013 最后编辑:kharevbv 更新时间:8/1/2013 访问量:1871
在 C 编程语言中将结构从 32 位移动到 64 位 [已关闭]
moving a structure from 32-bit to 64-bit in C programming language [closed]
问:
我的问题是,我想将结构从 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 次写入/读取。但这是一个乏味的过程,能有其他选择吗?
答:
4赞
paxdiablo
7/31/2013
#1
只要使用兼容的数据类型,就可以在 32 位和 64 位之间复制数据。
例如,结构:
struct xyzzy {
int a;
int b;
}
如果您的类型在 32 位和 64 位世界中具有不同的宽度,则不兼容。int
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
评论
0赞
moooeeeep
7/31/2013
是什么让您认为这个问题是关于 32/64 位架构的?
0赞
paxdiablo
7/31/2013
鉴于可用信息,我最好的(受过教育的)猜测。在 OP 澄清之前,没有更多可继续的了。
评论