std::pair をバイナリ ファイルに保存しようとすると、不快なことが 1 つあることに気付きました。プロセッサ効率の面では便利かもしれませんが、より多くのストレージ スペースが必要になるため、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