Std :: çifti bir ikili dosyaya kaydedilmeye çalışıldığında std :: pair ile gerçekleşen hoş olmayan bir şey fark ettim: std :: çifti bir sözcüğe hizalanır. İşlemci verimliliği açısından yararlı olabilir, ancak daha fazla depolama alanı gerektirir, bu yüzden std :: çifti için hizalama modunu 1 bayta dönüştürmek istiyorum. Benim derleyici 2012.std :: eş <U,V> hizalama denetimi
#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
}
Bu çalıştı ++ MS VC, ama çalışmıyor:
class xxx
{
T1 _t1;
T2 _t2;
};
hizalanması:
#pragma pack(1)
typedef std::pair< double, size_t > Q;
std::cout << sizeof(Q) << '\n'; // 16
, değiştirmeyi deneyin * C/C++ -> Kod Üretimi -> Struct Üye Hizalama * seçeneği ('/ Zp1') – Praetorian
yerine daha iyi olmaz, sizin çalışma zamanı üzerinde vidalama sadece idare özel fonksiyonlar yazmaya ikili nesneleri okumak ve yazmak –