Главная ]
2.22.Выравнивание числовых данных
Программирование
Базы данных



 

Обычно, когда переменная с числовым типом данных создана, компилятор будет гарантировать, что переменная сохранена в должным образом выровненном адресе, но когда числовые данные сохранены в динамически выделенном буфере,  программист должен делать предосторожности, чтобы гарантировать, что  память должным образом выровнена. Некоторые платформы, в особенности с процессорами RISC, требуют, чтобы числовые данные в динамически выделенных структурах памяти были выровнены должным образом в памяти. Выравнивание зависимо, и от типа данных  и от платформы. Например, short число на Sun SPARCstation должно быть расположено в адресе, делимом 2, в то время как long на той же самой платформе должен быть расположен в адресе, делимом 4. В большинстве случаев, элемент данных должным образом выровнен, если адрес его стартового байта делимый правильным номером выравнивания. Консультируйтесь с определенной системой и документацией компилятора для требований выравнивания. Полезное правило бегунка - то, что размер типа данных является всегда имеющим силу номером выравнивания для типа данных. Для данного типа T, если размер (T) равняется n, то адреса делимый n правильно выровнены для T. Следующее макро выражение может использоваться, чтобы выровнять данные:

 #define ALIGN (ptr, n) ((ptr + n - 1) и ~ (n - 1))))

Где ptr - указатель на символ. Следующий код иллюстрирует, как макрокоманда ALIGN могла бы использоваться:

char *buffer_pointer, *next_aligned;

next_aligned = ALIGN(buffer_pointer, sizeof(T));  

<< Назад ] Содержание ] Далее >> ]

 

Дизайн: Piton Alien
Rambler's Top100 Рейтинг@Mail.ru
Сайт создан в системе uCoz