C - 64 位平台中的 4 字节指针



It's C/Linux env.

我在想这是否可能。我有一个应用程序,需要在 32 位和 64 位平台之间相互通信。在它的心跳中,有一个结构,如下所示:

typedef struct{
          ..... //usual data type
          unit32_t* old;
          unit32_t* new;
}heartbeat;

这两个指针在 32 中占用 8 个字节,但在 64 中占用 16 个字节。它使心跳的大小不同,并且可能误解指针。我唯一可以修改的代码是 64 位平台中的代码。有什么办法可以解决这个问题吗?

谢谢

首先,您必须意识到,对于"其他"进程,指针不能被视为指针。

您可以修改指针,但不能从指针读取数据或向其写入数据。

在这种情况下,使用"Kerrek SB"的"int32_t"的想法是有意义的;但是使用"uint64_t"更有用,因为这将允许32位进程修改指向大于4 GiB的地址空间的指针:

typedef union {
    uint32_t *ptr;
    uint64_t address;
} maxaddr;
不要使用"

hb.old++",而是使用"hb.old.address+=sizeof(uint32_t)"。

最新更新