这是C / Linux环境。
我在想是否可能。我有一个应用程序需要在32位和64位平台之间相互通信。在它的心跳中,有一个像这样的结构:
typedef struct{
..... //usual data type
unit32_t* old;
unit32_t* new;
}heartbeat;
两个指针在32个字节中占用8个字节,但在64个字节中取16个字节。它使心跳的大小不同,并且可能误解指针。我可以修改的唯一代码是64位平台的代码。有什么方法可以解决这个问题吗?
由于
答案 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)”。