我注意到在尝试将 std::pair 保存到二进制文件时发生了一件不愉快的事情:std::pair 与一个单词对齐。它在处理器效率方面可能很有用,但需要更多存储空间,因此我想将对齐模式切换为 std::pair 的 1 字节。我的编译器是 MS VC++ 2012。
#include <iostream>
int main( )
{
struct S_a { double a; size_t b; };
#pragma pack(1)
struct S_wa { double a; size_t b; };
std::cout << sizeof( size_t ) << '\n'; // 4
std::cout << sizeof( double ) << '\n'; // 8
std::cout << sizeof( std::pair< size_t, size_t > ) << '\n'; // 8
std::cout << sizeof( std::pair< double, size_t > ) << '\n'; // 16 - bad
std::cout << sizeof( S_wa ) << '\n'; // 12 - good
std::cout << sizeof( S_a ) << '\n'; // 16
std::cout << sizeof( std::pair< double, double > ) << '\n'; // 16
}
我试过这个,但它不起作用:
#pragma pack(1)
typedef std::pair< double, size_t > Q;
std::cout << sizeof( Q ) << '\n'; // 16