iは、次のコードを持っている:スタック変数はGCCの__attribute __((aligned(x)))で整列されていますか?
#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]);
}
を、私は次の出力があります。a[0]
のアドレスは0x1000
の倍数でないのはなぜ
0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac
を?
正確には__attribute__((aligned(x)))
とは何ですか?私は誤解したthisの説明は?
私はgcc 4.1.2を使用しています。
+1正解。別の解決策は、ローカル配列を静的にすることです。スタック上のアライメントは常に問題であり、回避する習慣に入るのが最善です。 –
ああ、私はそれを静的にすることを考えなかった。それは名前の衝突を防ぐので、良いアイデアです。私は私の答えを編集します。 – Zifre
これを静的にすると、スレッドはリエントラントでなくなり、スレッドセーフではありません。 – ArchaeaSoftware