gpt4 book ai didi

具有相同编译时间选项的两个进程可以在同一台机器上有不同的字节对齐方式吗?

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:52 25 4
gpt4 key购买 nike

我有一个写入共享内存的进程和另一个从中读取的进程。两者共享相同的头文件,也有相同的用于编译的编译器标志。在运行这两个进程时,结构在一个中是 4 字节对齐的,在另一个中是 8 字节对齐的。

这可能吗?如果是,那么有任何解决方案可以使两者具有相同的对齐方式吗?

例如。其中一个结构是

typedef struct a {
unsigned int x;
unsigned long long y;
}b;

在进程 1 中,上述结构的 sizeof 为 12,而在进程 2 中,大小为 16。机器中 int 的大小为 4 字节,unsigned long long 为 8 字节。

在 gdb 中,从上述结构的实例开始,存储在共享内存中的数据如下所示:

0x01 0x02 0x03 0x04 0x00 0x00 0x00 0x00  
0x00 0x00 0x00 0x00 0x05 0x06 0x07 0x08

在进程 1 中:b.x = 0x1020304b.y = 0x0
在进程 2 中:b.x = 0x1020304b.y = 0x5060708

最佳答案

为了对齐结构,看一下align属性(特定于 GCC)。至于你的问题,我不知道编译器以不同方式对齐结构的任何原因。您必须提供更多详细信息才能调查...

关于具有相同编译时间选项的两个进程可以在同一台机器上有不同的字节对齐方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com