C++平台兼容性

Che*_*ebz 4 c++

对象foo被写入平台1上的新文件,如下所示:

write( file, &myFoo, sizeof(struct foo) );
Run Code Online (Sandbox Code Playgroud)

...然后使用以下方式在平台2上阅读:

read(file, &myFoo, filesize(file) );
Run Code Online (Sandbox Code Playgroud)

foo对象具有以下定义:

struct foo
{
    char  a;
    int   b; 
    long  c;
    char* d;
};
Run Code Online (Sandbox Code Playgroud)

foo在平台2上加载时可能会出现什么问题?

Bo *_*son 12

各种问题!

我们不知道char,int,long或者char*是在不同的平台的大小相同.

d指出的东西发生了什么?

成员之间可能还存在填充,这可能因平台而异.大端和小结束系统将以不同的顺序存储整数和指针的字节.如果你真的不走运,可能还有一个中端系统.

  • 他接受了这个,没有询问中端?害怕. (4认同)

cni*_*tar 8

当你这样做时,你需要注意:

  • 数据类型大小(char是唯一可以信任的)
  • 对齐/填充
  • 字节序
  • 指向无效的内存
  • 浮点表示
  • ASCIIvs EBCDIC?(是的,认真的?)
  • 可能是其他人

  • "char是唯一值得信赖的人" - 而且这种方式并不有用.`sizeof(char)`是1,但如果`CHAR_BIT`在平台1上是16,在平台2上是8,那么当文件从一个系统传输到另一个系统时,必须给出一些东西.在实践中,16位字符系统可能没有文件系统,而9位系统是如此古老无人问津,但原则上你甚至不能信任`char` ... (3认同)