11 Ocak 2018 Perşembe

alignof

Giriş
C++ dilinde POD struct'lar Data Structure Alignment işlemine tabi tutulur. Alignment sonrasında, POD alignof () metodunun döndürdüğü değerin katı olan bir sizeof() büyüklüğüne sahip olur.
std::max_align_t
Sistemdeki en büyük alignment değerini öğrenmek için şöyle yaparız. Muhtemel çıktı 16'dır.
std::cout << alignof(std::max_align_t) << '\n';
Örnek
Elimizde şöyle bir struct olsun.
struct Foo
{
  int   a;  float b;
  char  c;
};
Bu POD yapısında en büyük bileşen 4 byte olan int veya float. Yapı 4 byte'a align olursa, sizeof() metodu POD 9 byte yer kaplasa bile 4'ün katı bir değer olan 12 byte'a çıkacak şekilde boş değişkenlerle doldurulur. Şu cümle önemli
The alignment of a struct is equal to the largest alignment of its members.
Örnek
Elimizde şöyle bir struct olsun.
struct Foo{char m_[16];}; //alignof = 1 sizeof = 16

std::cout << sizeof(Foo) << " " << alignof(Foo);
Açıklaması şöyle.
When alignof is applied to a reference type, the result is the alignment of the referenced type. When alignof is applied to an array type, the result is the alignment of the element type.
Örnek
Elimizde iki struct olsun.
struct One {
  float x, y, z;
};

struct Two {
  float c[3];
};
Bu iki struct aynı yapıya sahip gibi görünse de ilkinde 3 alan, diğerinden ise 1 alan var. 3 alanlı yapının arasında derleyici istediği gibi boşluk yerleştirebilir. Dolayısıyla her iki yapı yerleşim uyumlu (layout-compatible) değildir.

Hiç yorum yok:

Yorum Gönder