SORU
8 Mayıs 2009, Cuma


____Ö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
8 Mayıs 2009, Cuma


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hanksranger

    hanksranger

    6 EKİM 2009
  • RocketJump

    RocketJump

    22 ŞUBAT 2006
  • spyib

    spyib

    9 Ocak 2007