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

  • KoreanFrogMania님의 채널

    KoreanFrogMa

    18 Aralık 2011
  • SlimaksClass

    SlimaksClass

    15 Kasım 2010
  • TastyTuts | Creative video tutorials by Gareth David

    TastyTuts |

    6 Temmuz 2011