____Öznitelik GCC((hizalanmış(x))) açıklama
aşağıdaki kodu var:
#include <stdio.h>
int
main(void)
{
float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};
printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);
}
Ve şu çıktıyı aldım:
0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac
a[0]
adresi 0x1000
katı değil neden?
Tam olarak 8 ** nedir? this açıklama yanlış anladım?
Gcc 4.1.2 kullanıyorum.
CEVAP
Sorun dizi yığında olduğuna inanıyorum. Yığın işaretçisi işlevi başladığında her şey olabilir çünkü, ihtiyacınız olandan daha çok tahsis ve ayarlama olmadan dizi hizalamak için bir yolu yoktur. Eğer global bir değişken fonksiyon ve dizi taşırsanız, çalışması gerekir. Yapabileceğiniz başka bir şey, yerel bir değişken olarak çok iyi bir şey) tutmak, ama static
olun. Bu yığında saklı engelleyecektir. Bu iki yol da dizinin tek bir kopya olacak beri evresel veya özyineleme güvenli değildir, dikkat edin.
Kodu: bu
#include <stdio.h>
float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};
int
main(void)
{
printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);
}
.
0x804c000 0x804c004 0x804c008 0x804c00c
bekleniyor. Orijinal kod ile, ben de tıpkı senin yaptığın gibi rastgele değerler.
Yazmayı java kullanarak bir metin dosy...
Açıklama iğne sığacak şekilde yakınlaş...
Java dönüştürme arasında.zaman.LocalDa...
C# neden't isimsiz bir yöntem ver...
Nasıl PowerShell kod açıklama mı?...