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

  • CasinoRoyaleMovie's channel

    CasinoRoyale

    1 AĞUSTOS 2006
  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • WoodysGamertag

    WoodysGamert

    17 Aralık 2009