64位平台的4字节指针?

时间:2014-02-10 00:26:49

标签: c linux 32bit-64bit

这是C / Linux环境。

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

typedef struct{

          ..... //usual data type
          unit32_t* old;
          unit32_t* new;

}heartbeat;

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

由于

1 个答案:

答案 0 :(得分:1)

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

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

在这种情况下,使用“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)”。