c - 在 C 编程语言中将结构从 32 位移动到 64 位

标签 c 32bit-64bit

<分区>

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

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

让我介绍一下实际问题,这与缓存有关,我们在 32 位空间的 ram 上有大小限制,所以如果我们在 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 位写入/读取。但这是一个乏味的过程,是否可以有其他选择??

最佳答案

只要您使用兼容的数据类型,您就可以在 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

关于c - 在 C 编程语言中将结构从 32 位移动到 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965142/

相关文章:

c++ - 我如何转发声明句柄? (Win32)

c - PCI_VDEVICE 和 PCI_DEVICE 有什么区别?

c - 如何在不使用结构体的情况下在一个函数中返回两个值?

ubuntu - 在 64 位 linux 上安装 32 位 jvm

将两个 32 位 float 转换为一个 64 位数字,反之亦然

python - 64位python 2.5/2.6+windows 7 "import socket"DLL加载错误

c - g_object_new 应该有匹配的 g_object_unref 吗?

linux - 将数据从 32 位用户程序传递到 64 位 linux

c++ - Qt5 QImageReader 奇怪的行为

c - 使用函数 'printf' 不必要的换行符