要想写一个自定义结构体的存储文件,第一步就是创建自己的结构体,但是由于不同系统的存储方式是不一样的,所以我们不能准确的知道自己创建的结构体的大小,那么我们就不能正确读取自己写入dat文件的数据,所以我们需要保证我们创建的结构体的大小是已知且是不变的,这时我们需要用到
#pragma pack() 预编译它的作用是:https://blog.csdn.net/Du_Shuang/article/details/81318094
#include<iostream>
using namespace std;
#pragma pack()
typedef struct pack
{
char a;
int b;
float c;
double d;
}pack1;
#pragma pack()
int main()
{
int c = sizeof(pack1);
cout << c << endl;
getchar();
getchar();
}
按理说该结构体的大小应该为1+4+4+8=17,但是实际运行代码结果为:
是24,这时为什么呢?因为系统为了内存中数据的读取速度,并不是将数据紧密的挨着一起进行存储,具体的存储规则请看上面那篇博客。
假如我们将#pragma pack(1)加在前头,结果又会是怎么样呢?
#include<iostream>
using namespace std;
#pragma pack(1)
typedef struct pack
{
char a;
int b;
float c;
double d;
}pack1;
#pragma pack()
int main()
{
int c = sizeof(pack1);
cout << c << endl;
getchar();
getchar();
}
这会就是17了,所以上面预编译命令的作用是让内存将结构体的数据挨着排列。这样做的好处是我们能够很好的控制内存,但是坏处是降低了结构体读取的速度。