Как этот код выравнивает указатель по 64-битной границе? - PullRequest
0 голосов
/ 07 февраля 2011

Я хотел бы знать, как этот фрагмент кода выравнивает указатель на 64-битную границу?Я нашел этот код в uboot cpu / mpc85xx / ether_fcc.c.Здесь базовый контроллер Ethernet требует, чтобы указатель буфера был выровнен по 64-битной границе.

uint cbd_bufaddr;
volatile uchar *NetRxPackets[PKTBUFSRX];
cbd_bufaddr = (uint)NetRxPackets[i];

Я считаю, что приведенная ниже проверка обязательна, чтобы гарантировать, что указатель выровнен по 64-битной схеме, но я не вижуэто где-нибудь в коде Uboot.

if (cbd_bufaddr % 8 != 0)
    cbd_bufaddr += 8 - cbd_bufaddr % 8;

Я был бы очень признателен, если кто-то может указать, если я упускаю что-то очевидное?

1 Ответ

4 голосов
/ 07 февраля 2011

Ничто в этом исходном коде не гарантирует ничего о выравнивании.Ваш первый блок кода просто вытаскивает указатель из массива NetRxPackets и вставляет его в cbd_bufaddr.Из предоставленного вами кода нет никаких указаний на то, что указатели внутри этого массива имеют какие-либо ограничения на выравнивание.Вам нужно будет показать нам код, который инициализирует этот массив, чтобы мы могли подробнее рассказать о том, что происходит.

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