выравнивание внешних констант (gcc) - PullRequest
0 голосов
/ 25 апреля 2010

Я хочу сделать некоторые статические константы глобально видимыми. Я довольно хорошо знаю, как это сделать в C ++. Проблема в том, что эти константы должны быть выровнены по некоторой экзотической границе. Нужно ли указывать выравнивание во внешней декларации? Я использую GCC4.5

в * .cpp файле

static const constant_t constant __attribute__((aligned(64))) = {blah,blah,blah};

в * .h файле

//Which one is correct?
extern const constant_t constant;
extern const constant_t constant __attribute__((aligned(64)));

1 Ответ

3 голосов
/ 25 апреля 2010

Во-первых, похоже, что вы пытаетесь объявить его статическим в C-файле, который является старым C-способом обозначения внутренней (файловой) связи. Это не соответствует вашей цели сделать его глобальным.

Учитывая, что статический элемент удален, вам нужен только атрибут в файле C: объявление extern эффективно говорит: «Я хочу использовать это имя, когда вы, наконец, узнаете его адрес, замените его здесь». Другими словами, как только адрес назначен в точке определения в C-файле, ваш extern будет символически указывать на этот же адрес.

...