我觉得pragma pack 宏的作用有两种:
第一)往大的设。牺牲空间换取时间,不过好像我从来没这么做过。
第二)设为1。两个好处:节约空间,如果是在网络上大量传输会快一些吧。第二个好处比较大,可以保证对象内存结构的跨平台性。
比如:
struct A {int i;long long l};在64位linux下sizeof是16,32位则是12。如果读写双方(可以通过网络,也可以通过文件)平台不一致,还不天下大乱?下面这么做搞定:
#pragma pack(push, 1)
struct A
{
int i;
long long l;
};
#pragma pack(pop)
第一)往大的设。牺牲空间换取时间,不过好像我从来没这么做过。
第二)设为1。两个好处:节约空间,如果是在网络上大量传输会快一些吧。第二个好处比较大,可以保证对象内存结构的跨平台性。
比如:
struct A {int i;long long l};在64位linux下sizeof是16,32位则是12。如果读写双方(可以通过网络,也可以通过文件)平台不一致,还不天下大乱?下面这么做搞定:
#pragma pack(push, 1)
struct A
{
};
#pragma pack(pop)