C++平台兼容性
C++ platform compatibility
将对象foo
写入平台1上的新文件,如下所示:
write( file, &myFoo, sizeof(struct foo) );
然后使用在平台2上读取
read(file, &myFoo, filesize(file) );
foo
对象具有以下定义:
struct foo
{
char a;
int b;
long c;
char* d;
};
在平台2上加载foo
时可能会出现什么样的问题?
各种问题!
我们不知道char
、int
、long
或char*
在不同平台上的大小是否相同。
d所指的东西怎么了?
成员之间也可能存在填充,这可能因平台而异。大端序和小端序系统将以不同的顺序存储整数和指针的字节。如果你真的很不走运,可能还有一个中端系统。
当你这样做时,你需要注意:
- 数据类型大小(
char
是您唯一可以信任的类型) - 对齐/填充
- 无尽
- 指向无效内存
- 浮点表示法
ASCII
与EBCDIC
?(是的,说真的吗?)- 可能还有其他
我认为,您必须使用pack pragma来确保没有填充。否则,char的大小将为4个字节,具体取决于默认的填充方法。
char*这个地址指针在32位机器上可以有32位,但在64位机器上有64位。所以直接存储指针是无稽之谈。
最后一个是endian。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 正在查找文档以获得PS4平台的C++中的设备信息
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 提升序列化 1:73 的向后兼容性问题
- 如何基于平台在制作文件中制作if语句?
- 在 Linux 平台的 C++ 中动态加载 DLL
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- Visual Studio 19-17 库兼容性根据 GL 标志
- 无法使用 aarch64-unknown-nto-qnx7.0.0-g++-5.4.0 编译器交叉编译 QNX 平台的
- 如何判断类型双关语在我的平台上是否可以?
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 操作系统平台支持宏和提升库
- C++ ABI 兼容性问题/张量流
- 平台游戏 - 下车时避免与平台碰撞
- NPM 安装:找不到平台工具集 = v141
- 如何在 64 位平台上计算 32 位哈希C++?
- c++.结构在不同平台上的填充/对齐和布局兼容性的自动检查
- C++平台兼容性