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)"。