С выравнивание на НЕ степени 2 - PullRequest
4 голосов
/ 22 мая 2009

В gcc есть директива под названием .align, которая позволяет мне выравнивать вещи на границах, которые должны быть степенью двойки . Тем не менее, на моей машине Intel Core Duo я хочу выровнять некоторый код (не данные) по адресам, которые НЕ являются степенями двух. Есть ли прямой способ сделать это?

Потому что, очевидно, .align 3 дает мне ошибку: Ошибка: выравнивание не является степенью двойки.

Ответы [ 2 ]

3 голосов
/ 22 мая 2009

Выровняйте по степени два, а затем добавьте соответствующее количество NOP ассемблера перед кодом, который вы хотите выровнять. (Я предполагаю, что вы знаете, как сделать встроенный ассемблер в gcc здесь; прокомментируйте, если вы этого не сделаете.)

0 голосов
/ 22 мая 2009

Если вы используете GCC, вы можете использовать упакованные структуры и заполнение вручную:

struct very_slow_t
{
   int a;
   char padding;
   int b; /* b is now padded to byte 5 */
} __attribute__((__packed__));

Но зачем тебе это делать? Я имею в виду, это сделало бы вашу программу намного медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...