在 C 编程语言中将结构从 32 位移动到 64 位 [已关闭]

moving a structure from 32-bit to 64-bit in C programming language [closed]

提问人:kharevbv 提问时间:7/31/2013 最后编辑:kharevbv 更新时间:8/1/2013 访问量:1871

问:


与你编写的代码问题有关的问题必须在问题本身中描述具体问题,并包含有效的代码来重现它。有关指导,请参阅 SSCCE.org

10年前关闭。

我的问题是,我想将结构从 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 次写入/读取。但这是一个乏味的过程,能有其他选择吗?

c 32位-64位

评论

7赞 hetepeperfan 7/31/2013
欢迎来到 stackoverflow,您可能想向我们展示一些您正在尝试执行的代码,因为目前还不清楚您要实现的目标。
0赞 kharevbv 7/31/2013
让我介绍一下实际问题,这与缓存有关,我们在 ram 上的大小有限,即 32 位空间,因此如果我们在 ram 上有 1G 空间,并且单个缓存对象的结构大小为 1M,那么我可以存储的对象数量限制为 1G/1M。 因此,为了解决这个探针,我想在 64 位 spcace 中声明我的结构(以便有没有 spcace crunch ),并且对象的数量实际上可以无限大。
0赞 hetepeperfan 7/31/2013
请更新问题,其他有您特定问题的用户将在那里查找信息,而不是在评论中。
0赞 kharevbv 7/31/2013
谢谢你的建议,你遇到问题了吗?

答:

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 澄清之前,没有更多可继续的了。