__alignof operatörü
Microsoft özel
Türünde bir değer döndürür size_t, yani hizalama gereksinimi türü.
__alignof(
type
)
Notlar
Örne?in:
İfade |
Value |
---|---|
__alignof (char) |
1 |
__alignof (kısa) |
2 |
__alignof (int) |
4 |
__alignof (__int64) |
8 |
__alignof (float) |
4 |
__alignof (double) |
8 |
__alignof (char *) |
4 |
__alignof Değeri değeri ile aynı olup sizeof temel türü için. , Ancak bu örneði ele alalým:
typedef struct { int a; double b; } S;
// __alignof(S) == 8
Bu durumda, __alignof yapısındaki en büyük öğe hizalama gereği bir değerdir.
Benzer şekilde, için
typedef __declspec(align(32)) struct { int a; } S;
__alignof(S)eşittir 32.
Kullanım için __alignof kendi bellek ayırma yordamlar için parametre olarak olacaktır. Örneğin, aşağıda yapı tanımlanan S, adlı bir bellek ayırma yordam çağrısı aligned_malloc belirli hizalama sınırına bellek ayrılamıyor.
typedef __declspec(align(32)) struct { int a; double b; } S;
int n = 50; // array size
S* p = (S*)aligned_malloc(n * sizeof(S), __alignof(S));
Hizalamayı değiştirme hakkında daha fazla bilgi için bkz:
Yapı Hizalama Örnekleri(x 64 belirli)