【发布时间】:2011-09-06 06:23:18
【问题描述】:
我注意到我的程序结构上的 sizzeof() 在 x86 和 x64 平台上是不同的。这是因为字节填充。由于一个要求(我的应用程序在跨拱 m/c 之间进行通信),我需要确保目标应该获得与发送者通过命名管道发送的相同大小的结构(在我的情况下,我无法再次读取管道剩余数据..)。如果我可以在该结构上使用 sizeof() 运算符之前安全地禁用/启用填充或剥离填充字节,我需要一种 C++ 方法。
谢谢..
[编辑 |结论]:只是为其他试图为类似问题寻求解决方案的人提供的输入。尝试了很多愚蠢的事情来解决这个问题,但这里提到的一个可能的解决方案以另一种方式产生了问题,调试哪个时间。我能找到的解决这个问题的最佳选择是使用下面提到的“R..”序列化和反序列化方法。
【问题讨论】:
-
你确定这只是一个填充问题吗?通常
sizeof的结果(除了sizeof(char))取决于平台。 -
那么它可能是什么。 x64 上的相同结构,sizeof 运算符显示“336”字节,而 x86 架构显示“316”字节。除了填充之外,我想不出其他原因。
-
除了填充之外还有一件事,有些类型在 x86 和 x64 之间的大小不同。
longvoid *size_t及其所有派生类型都有不同的大小。
标签: c++ c cross-platform padding named-pipes