【发布时间】:2013-08-16 03:59:26
【问题描述】:
我注意到在尝试将 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
【问题讨论】:
-
在项目属性下,尝试更改C/C++ -> Code Generation -> Struct Member Alignment 选项 (
/Zp1) -
与其搞砸你的运行时,不如写一些特殊的函数来紧凑地处理读写对对象不是更好吗?
标签: c++ memory-alignment std-pair