Bu C kodu rastladım ve bunu anlamaya çalışıyorum:C hizalama yapıları nasıl yardımcı olur?
typedef long Mtx_t[4][4];
typedef union {
Mtx_t m;
long long int force_structure_alignment;
} Mtx;
ilk typedef bir 4x4 matris olarak Mtx_t tanımlar, o kadarını anlıyorum. Ancak Mtx için ikinci yazım, yalnızca önceki türden çağrı yapar ve force_structure_alignment adlı uzun bir uzun int ekler.
Bunun amacı nedir? Neden sadece Mtx'i 4x4 matrisi olarak tanımlayıp onunla yapılmasın?
İlginç bir örnek; Birleşim olduğu için büyüklük en büyüktür; sistemimde hangi uzun [4] [4] 'için 128 bayt olurdu. Diğer alan, sistemimde yalnızca “8” bayt olduğunda. Herhangi bir hizalamaya katkıda bulunmuyor gibi görünüyor. 'Force_structure_alignment' öğesinin, hizalama için kullanılması durumunda diğer türlerden daha büyük olacağını düşünürsünüz. – jacob
Geçerli bir "uzun" sınırda hizalanmak zorunda kalıyorlar. Örneğin, bu 8 bayt, uzun süre 4 bayt olabilir. Bunun neden istenildiği belli değil. Bellek referans performansını iyileştirmek için bir girişim olabilir. Ayrıca, daha büyük bellek erişimlerini gerçekleştirmek için 'Mtx_t' değişkenini' uzun uzun' ile takma girişiminde bulunmak isteyebilirler. –
@jacob: 'Uzun [4] [4]' sadece 'uzun'nın hizalama gerekliliklerine sahiptir, bu yüzden uzun uzunların hizalaması muhtemelen daha katıdır. – user2357112