Что такое выравнивание
Перейти к содержимому

Что такое выравнивание

  • автор:

Выравнивание – что означает? Определение, значение, примеры употребления

Ищешь, что значит слово выравнивание? Пытаешься разобраться, что такое выравнивание? Вот ответ на твой вопрос:

Значение слова «выравнивание» в словарях русского языка

Выравнивание это:

Выравнивание

1.процесс действия по гл. выравнивать I, выравниваться I

2.Результат такого действия. II ср.

1.процесс действия по гл. выравнивать II, выравниваться II

2.Результат такого действия.

Большой современный толковый словарь русского языка

Выравнивание

1. ср. Процесс действия по знач. глаг.: выравнивать (1*), выравниваться (1*).

2. ср. Процесс действия по знач. глаг.: выравнивать (2*), выравниваться (2*1-
4).

Новый толково-словообразовательный словарь русского языка Ефремовой

Выравнивание

Словарь русского языка Лопатина

Выравнивание

в статистике — метод, при помощи которого получают аналитическое и графическое выражение закономерности, лежащей в основе заданного эмпирического ряда статистических данных.

Современный толковый словарь, БСЭ

Выравнивание

1. ср. Процесс действия по знач. глаг.: выравнивать (1*), выравниваться (1*).

2. ср. Процесс действия по знач. глаг.: выравнивать (2*), выравниваться (2*1-
4).

Толковый словарь Ефремовой

Выравнивание

РАЗЛИЧИЙ- компенсация различий в оплате труда разных профессий другими видами доходов.

Словарь экономических терминов

Выравнивание

в статистике, метод, при помощи которого получают аналитическое и графическое выражение статистической закономерности, лежащей в основе заданного эмпирического ряда статистических данных. Путём В. ломаную линию уровней эмпирического ряда заменяют плавной ‘выравнивающей’ кривой (в частном случае — прямой) и вычисляют уравнение этой кривой. При В. последовательно решают три задачи: выбирают тип уравнения (форму плавной кривой); вычисляют параметры (коэффициенты) этого уравнения; вычисляют (на основании уравнения) или измеряют (по графику кривой) уровни (ординаты) полученного ‘теоретического’ статистического ряда. Тип уравнения и, соответственно, форму плавной кривой выбирают на основании общих сведений (или часто — из практического опыта) о сущности явления, о закономерностях его структуры и развития, о зависимости между его признаками и т.д. (так называемое ‘аналитическое’ В.); при отсутствии таких предварительных сведений тип уравнения (форму кривой) часто может подсказать графическая форма ломаной, выражающей заданный эмпирический ряд. В социально-экономической статистике В. применяют в трёх типичных случаях:
1) В. рядов распределений;
2) В. ломаных линий регрессии;
3) В. рядов динамики. Цель В. рядов распределения — количественно и графически выразить характер закономерности распределения единиц совокупности по данному признаку (например, их нормальное распределение, распределение по закону Пуассона и т.п.). При этом сохраняют равенство некоторых главных числовых характеристик заданного эмпирического и получаемого теоретического рядов: средней величины признака, среднего квадратического отклонения, общей численности единиц совокупности. Степень совокупного соответствия уровней (ординат) полученного теоретического ряда уровням эмпирическим выясняют при помощи какого-либо критерия согласия. В некоторых особых случаях — например, при В. распределения населения по возрасту, показанному при переписи, для устранения хорошо известной ‘аккумуляции возрастов’, оканчивающихся на 0 или на 5, — применяют специально разработанные способы и формулы. В. распределений всегда предполагает наличие достаточно многочисленного заданного эмпирического ряда данных. В. ломаных линий регрессии производят при изучении связей признаков, чтобы получить плавную линию регрессии и уравнение регрессии (корреляционное), выражающее зависимость средних значений одного признака от значений других, например: и т.п. К В. рядов динамики прибегают, чтобы получить уравнение (и плавную линию), выражающее тенденцию развития процесса во времени ( t ), например: y a + bt , y a + bt + ct 2 и т.п. В обоих последних случаях В. коэффициенты а , в , с ,… искомого уравнения обычно вычисляют по наименьших квадратов методу . Не следует смешивать В. статистических рядов динамики со сглаживанием статистических рядов.Лит.: Хёнтингтон Е. В., Выравнивание кривых по способу наименьших квадратов и способу моментов, в кн.: математические методы в статистике. Сб. статей, под ред. Г. Л. Ритца. Пер. и обраб. С. П. Боброва, М., 1927, с. 147-61; Ежов А. И., Выравнивание и вычисление рядов распределений, М., 1961; Хотимский В. И., Выравнивание статистических рядов по методу наименьших квадратов (способ Чебышева), М. — Л., 1925, 2 изд., М., 1959; Четвериков Н. С., О технике вычисления параболических кривых, в сб.: Вопросы конъюнктуры, т. 2, М., 1926; переизд. в его кн.: Статистические и схоластические исследования, М., 1963, с. 190-210; Ястремский Б. С., Некоторые вопросы математической статистики, М., 1961, гл. II; Обухов В. М., К вопросу о нахождении уравнения регрессии, удовлетворяющего данному эмпирическому ряду, ‘Труды ЦСУ’, т. 16, в. II, М.,

1923. Ф. Д. Лившиц.

Большая советская энциклопедия, БСЭ

Выравнивание

выравнивание, -я

Полный орфографический словарь русского языка

Выравнивание

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

Викисловарь

Где и как употребляется слово «выравнивание»?

Кроме значения слова «выравнивание» в словарях, рекомендуем также ознакомиться с примерами предложений и цитат из классической литературы, в которых употребляется слово «выравнивание».

Так вы сможете гораздо легче понять и запомнить, как правильно употребляется слово «выравнивание» в тексте и устной речи.

Примеры употребления слова «выравнивание»

Очевидно, свобода передвижения при низких барьерах мобильности сама заботится об определённом выравнивании уровней оплаты труда между регионами, неравномерно развитыми в промышленном отношении.

Карл-Хайнц Паке, Баланс. Экономический анализ проекта «Немецкое единство»

Первый ряд делает развальную борозду, второй работает в свал, чем достигается более интенсивное рыхление и выравнивание поверхности поля.

Коллектив авторов, Большая энциклопедия техники

Этот диагноз ставится, если воспаление ещё не возникло, но есть признаки нарушения выравнивания давления в среднем ухе.

Ксения Клименко, В лабиринтах уха, горла и носа. Скрытые механизмы работы, неочевидные взаимосвязи и полезные знания, которые помогут «дотянуть» до визита к врачу

Выравнивание является ответом на вопросы из кроссвордов

  • Способ размещения данных в памяти особым образом для ускорения доступа
  • Разглаживание поверхности
  • Выстраивание строк текста в соответствии с заданным стилем
  • Планировка, срезание неровностей почвы
  • В статистике — метод, при помощи которого получают аналитическое и графическое выражение закономерности, лежащей в основе заданного эмпирического ряда статистических данных
  • Значение слов
  • Разбор слов
  • Предложения со словом
  • Ответы на кроссворды

Значение слова «выравнивание»

Выравнивание или пенепленизация (геология) — процесс выравнивания рельефа.

Выравнивание данных (информатика).

Выравнивание (балансировка) нагрузки.

Выравнивание последовательностей (генетика).

выра́внивание

1. действие по значению гл. выравнивать, выровнять, также выравниваться, выровняться; придание чему-либо ровности ◆ Прочное приклеивание набора к основе достигается лишь при равномерной толщине облицовки, которую получают выравниванием мозаики. Татьяна Матвеева, «Реставрация столярно-мебельных изделий», 1988 г. (цитата из НКРЯ) 2. действие по значению гл. равнять, приведение каких-либо объектов к равному состоянию ◆ Вместе с тем, благодаря внедрению новых информационных технологий, сегодня наблюдаются тенденции постепенного выравнивания технического уровня почтовых систем разных стран. «Денежные переводы мигрантов — фактор инновационного развития мировой финансовой инфраструктуры», 2004 г. (цитата из НКРЯ) 3. полигр. то же, что выключка; выстраивание строк текста в соответствии с заданным стилем

Фразеологизмы и устойчивые сочетания

Делаем Карту слов лучше вместе

Привет! Меня зовут Лампобот, я компьютерная программа, которая помогает делать Карту слов. Я отлично умею считать, но пока плохо понимаю, как устроен ваш мир. Помоги мне разобраться!

Спасибо! Я стал чуточку лучше понимать мир эмоций.

Вопрос: синдикалистский — это что-то нейтральное, положительное или отрицательное?

Нейтральное
Положительное
Отрицательное

Ассоциации к слову «выравнивание&raquo

Синонимы к слову «выравнивание&raquo

Предложения со словом «выравнивание&raquo

  • Здесь действуют принципы взаимовыгодного сотрудничества, международной взаимопомощи, выравнивания уровней экономического развития отдельных стран.

Цитаты из русской классики со словом «выравнивание»

  • И здесь мы видим тот же процесс выравнивания берега и отвоевания сушей части территории, ранее захваченной морем.

Сочетаемость слова «выравнивание&raquo

  • выравнивание давления
    для выравнивания поверхности
    на выравнивание бюджетной обеспеченности
  • процесс выравнивания
    положение выравнивания
  • (полная таблица сочетаемости)

Понятия со словом «выравнивание»

Мно́жественное выра́внивание после́довательностей (англ. multiple sequence alignment, MSA) — выравнивание трёх и более биологических последовательностей, обычно белков, ДНК или РНК. В большинстве случаев предполагается, что входной набор последовательностей имеет эволюционную связь. Используя множественное выравнивание, можно оценить эволюционное происхождение последовательностей, проведя филогенетический анализ.

Простра́нственное выра́внивание — способ установления гомологии между двумя или более полимерными структурами на основании их трёхмерной структуры. Этот процесс обычно применяется к третичной структуре белков, но может также использоваться и для больших молекул РНК. В противоположность простому наложению структур, когда известно по крайней мере несколько эквивалентных аминокислотных остатков, пространственное выравнивание не требует никаких предварительных данных, кроме координат атомов.

Выравнивание последовательностей — биоинформатический метод, основанный на размещении двух или более последовательностей мономеров ДНК, РНК или белков друг под другом таким образом, чтобы легко увидеть сходные участки в этих последовательностях. Сходство первичных структур двух молекул может отражать их функциональные, структурные или эволюционные взаимосвязи. Выровненные последовательности оснований нуклеотидов или аминокислот обычно представляются в виде строк матрицы. Добавляются разрывы между.

Отправить комментарий

Дополнительно

  • Как правильно пишется слово «выравнивание»
  • Склонение существительного «выравнивание» (изменение по числам и падежам)
  • Разбор по составу слова «выравнивание» (морфемный разбор)
  • Цитаты со словом «выравнивание» (подборка цитат)
  • Перевод слова «выравнивание» и примеры предложений (английский язык)
  • Definition of «alignment&raquo at WordTools.ai (английский язык)

KonishchevDmitry’s small blog

С Linux так всегда — сколько не копай вглубь и вширь, всегда найдется что-то новое.

вторник, 12 января 2010 г.

Что такое выравнивание, и как оно влияет на работу ваших программ

Как-то раз, обсуждая с одногруппницей тему ее диплома, я посоветовал ей отличную статью Data alignment: Straighten up and fly right, посвященную выравниванию данных в оперативной памяти. Т. к. с английским у нее дела обстоят не очень хорошо, она попросила меня перевести статью на русский язык. Переведя статью, я решил, что незачем добру пропадать, и поэтому с разрешения автора выкладываю сюда перевод. Перевод довольно вольный, но в то же время достаточно точный. Вообщем, буду рад, если кому-нибудь пригодится.

Выравнивание данных — очень важное понятие, которое должен принимать во внимание каждый программист, работающий с памятью напрямую. Выравнивание данных влияет на скорость выполнения ваших программ и на то, будут ли они вообще работать. Понимание основных принципов, заложенных в данном понятии, объясняет на первый взгляд странное поведение некоторых процессоров.

Гранулярность доступа к памяти

Программисты привыкли думать о памяти, как о простом массиве байтов. В языке C и его языках-наследниках char* всегда означало «блок данных», и даже в Java™ есть тип byte[] для представления «сырых» данных в памяти.

Рис. 1. Как программисты видят память

Однако, процессор в вашем компьютере считывает данные из памяти блоками размером отнюдь не в одни байт. Считывание данных производится блоками по 2, 4, 8, 16 или даже 32 байта. Далее размер таких блоков мы будем называть гранулярностью доступа к памяти.

Рис. 2. Как эту же память видят процессоры

Разница в том, как программисты видят память, и как процессоры на самом деле с ней работают, приводит к интересным последствиям, которым и посвящена данная статья.

  • Приложение будет работать медленнее.
  • Приложение может «зависнуть».
  • Операционная система может внезапно аварийно завершиться.
  • Приложение будет работать непредсказуемо, что в итоге может привести к порче ваших данных.

Что такое выравнивание

Чтобы проиллюстрировать принципы, лежащие в основе выравнивания данных, выполним небольшую программу и посмотрим, какое влияние на нее будет оказывать гранулярность доступа к памяти. Программа предельно проста: сначала считываем в регистр 4 байта с адреса 0, а затем считываем в тот же регистр 4 байта с адреса 1.

Для начала посмотрим, как наша программа будет работать на процессоре с однобайтовой гранулярностью доступа к памяти:

Рис. 3. 1-байтовая гранулярность доступа к памяти

Здесь мы видим то, что и ожидает увидеть любой программист, руководствующийся базовыми представлениями о том, как работает оперативная память: при считывании 4 байт с адреса 1 процессор делает те же 4 операции доступа к памяти, что и при считывании данных с адреса 0. А теперь давайте посмотрим, как наша программа будет работать на процессоре с гранулярностью доступа к памяти в 2 байта (примером такого процессора является классический 68000):

Рис. 4. 2-байтовая гранулярность доступа к памяти

При чтении данных с адреса 0 процессору с 2-байтовой гранулярностью требуется в два раза меньше операций доступа к памяти, чем процессору с 1-байтовой гранулярностью. Считывание двух байтов за одну операцию доступа к памяти производится быстрее, чем считывание тех же двух байтов за две операции доступа к памяти (см. Разработка на PC и производительность — Memory Latency — прим. переводчика), так что производители процессоров могут добиться заметного увеличения производительности путем уменьшения операций доступа к памяти, увеличив при этом гранулярность.

Однако заметьте, что происходит, когда мы считываем данные с адреса 1. Т. к. адрес не кратен размеру считываемых данных, процессору приходится выполнять лишнюю работу, считывая при этом 6 байт вместо 4. Такой адрес называется невыровненным. При доступе к данным по невыровненным адресам процессору приходится делать лишние обращения к памяти, что в итоге приводит к снижению скорости работы программы.

Теперь же давайте посмотрим, что произойдет, если запустить нашу программу на процессоре с гранулярностью доступа к данным в 4 байта (таком как 68030 или PowerPC® 601):

Рис. 5. 4-байтовая гранулярность доступа к памяти

Процессор с гранулярностью доступа к памяти в 4 байта может считать требуемый нам объем информации с выровненного адреса за одну операцию доступа к памяти. Однако считывание данных с невыровненного адреса в два раза увеличивает количество операций доступа к памяти, требуемых для считывания того же объема данных.

Теперь, когда мы показали что такое выравнивание, перейдем к рассмотрению того, как оно влияет на работу вашей программы.

«Ленивые» процессоры

Процессор вынужден прибегать к некоторым дополнительным действиям при обработке инструкции на доступ к данным с невыровненного адреса. Вернемся к нашему примеру со считыванием 4 байт с адреса 1 на процессоре с гранулярностью в 4 байта:

Рис. 6. Обработка процессором команды на доступ к данным по невыровненному адресу

Процессор вынужден считать блок данных, на который приходится невыровненный адрес, сдвинуть полученные данные, считать следующий за ним блок данных, в котором содержится оставшийся один байт интересующих нас данных, сдвинуть полученные данные, объединить вместе с данными первого блока и поместить их в регистр, т. е. проделать довольно большой объем работы.

Некоторые процессоры просто не выполняют эту работу.

Классический 68000 был процессором с гранулярностью в 2 байта и не имел соответствующей логики обработки невыровненных данных. Если он сталкивался с командой на обращение к данным по невыровненному адресу, то просто генерировал исключение, а, к примеру, классическая Mac OS не обрабатывала данное исключение должным образом и выдавала пользователю сообщение с требованием перезагрузить систему.

Более поздние процессоры серии 680×0, к примеру 68020, утратили данное ограничение и выполняли всю необходимую работу. Это объясняет, почему некоторые старые программы, отлично работающие на 68020, аварийно завершались на 68000, и также объясняет тот факт, почему раньше программисты, писавшие программы для Mac OS, инициализировали указатели странными адресами — если на классической Mac OS управление доходило до разыменования указателя, которому не был присвоен адрес реально существующих данных, система немедленно передавала управление отладчику. Впоследствии они могли просмотреть стек вызова функций и определить, где произошла ошибка.

Каждый процессор имеет ограниченное количество транзисторов, которое может быть в нем использовано. Добавление поддержки доступа к невыровненным данным вынуждает инженеров уменьшать количество транзисторов, предназначенных для обеспечения работы остальных подсистем процессора, что может сделать невозможным добавление каких-либо дополнительных возможностей в процессор или несколько снизить скорость его работы.

Примером процессора, который ради скорости жертвует поддержкой доступа к невыровненым данным, является MIPS. MIPS — отличный пример процессора, в котором не реализованы многие специфические возможности во имя обеспечения более высокого быстродействия.

PowerPC использует следующий подход: все современные PowerPC-процессоры имеют поддержку доступа к невыровненным 32-битовым целочисленным значениям, и хотя пользователям и приходится платить за доступ к невыровненным данным некоторым снижением производительности, оно довольно невелико.

С другой стороны, современные PowerPC-процессоры не включают в себя поддержку доступа к 64-битовым вещественным числам, и если процессор встречает команду на доступ к такому числу с невыровненного адреса, то он генерирует исключение, передавая тем самым управление операционной системе и давая ей возможность на софтверном уровне выполнить всю необходимую работу. Это решает проблему, но, естественно, выполняется значительно медленнее, чем если бы все необходимые операции выполнял процессор.

Скорость

  1. Размер чисел, которыми обрабатывается буфер. Сначала буфер обрабатывается 1-байтовыми числами, затем 2-, 4- и 8-байтовыми.
  2. Выравнивание буфера. Мы изменяем выравнивание буфера, увеличивая указатель на него, и запускаем тест снова.

Листинг 1. Обработка 1-байтовыми числами

void Munge8( void *data, uint32_t size ) uint8_t *data8 = (uint8_t*) data; 
uint8_t *data8End = data8 + size;

while( data8 != data8End )
*data8++ = -*data8;
>

Для выполнения данной функции в среднем потребовалось 67 364 микросекунды. Теперь изменим ее для работы с 2-байтовыми числами (в таком случае ей потребуется выполнить в два раза меньше операций доступа к данным):

Листинг 2. Обработка 2-байтовыми числами

void Munge16( void *data, uint32_t size ) uint16_t *data16 = (uint16_t*) data; 
uint16_t *data16End = data16 + (size >> 1); /* Divide size by 2. */
uint8_t *data8 = (uint8_t*) data16End;
uint8_t *data8End = data8 + (size & 0x00000001); /* Strip upper 31 bits. */

while( data16 != data16End )
*data16++ = -*data16;
while( data8 != data8End )
*data8++ = -*data8;
>

Этой функции в среднем потребовалось 48 765 микросекунд для обработки того же 10 Мб буфера, что на 38% быстрее чем в предыдущем примере. Однако, этот буфер был выровнен. Если же мы возьмем невыровненный буфер, то время работы функции увеличится до 66 385 микросекунд, т. е. 27% времени будет уходить на обеспечение работы с невыровненными данными. Следующий график демонстрирует, как меняется производительность при обработке выровненного и невыровненного буфера:

Рис. 7. Сравнение времени обработки 1-байтовыми числами с временем обработки 2-байтовыми числами

Как видно из графика, обработка 1-байтовыми числами заняла довольно много времени. В то же время на обработку 2-байтовыми числами требуется значительно меньше времени, но только до тех пор, пока буфер выровнен по 2-байтовой границе, в противном случае 27% времени мы будем тратить впустую.

А теперь посмотрим, что будет, если мы попробуем обрабатывать данные четырехбайтовыми числами:

Листинг 3. Обработка 4-байтовыми числами

void Munge32( void *data, uint32_t size ) uint32_t *data32 = (uint32_t*) data; 
uint32_t *data32End = data32 + (size >> 2); /* Divide size by 4. */
uint8_t *data8 = (uint8_t*) data32End;
uint8_t *data8End = data8 + (size & 0x00000003); /* Strip upper 30 bits. */

while( data32 != data32End )
*data32++ = -*data32;
while( data8 != data8End )
*data8++ = -*data8;
>

Обработка выровненного буфера заняла 43 043 микросекунды. Невыровненный буфер обрабатывался 55 775 микросекунд. Таким образом, получается, что на данной тестовой машине невыровненные 4-байтовые числа обрабатываются медленнее выровненных 2-байтовых чисел:

Рис. 8. Сравнение времени обработки 1-байтовыми, 2-байтовыми и 4-байтовыми числами

А теперь плохая новость: попробуем обработать тот же буфер 8-байтовыми числами:

Листинг 4. Обработка 8-байтовыми числами

void Munge64( void *data, uint32_t size ) double *data64 = (double*) data; 
double *data64End = data64 + (size >> 3); /* Divide size by 8. */
uint8_t *data8 = (uint8_t*) data64End;
uint8_t *data8End = data8 + (size & 0x00000007); /* Strip upper 29 bits. */

while( data64 != data64End )
*data64++ = -*data64;
while( data8 != data8End )
*data8++ = -*data8;
>

Munge64() обработала выровненный буфер за 39 085 микросекунд — это на 10% быстрее чем при обработке 4-байтовыми числами. Однако обработка 8-байтовыми числами невыровненного буфера заняла целых 1 841 155 микросекунд — на два порядка медленнее обработки выровненных данных!

Что произошло? Т. к. в современных PowerPC нет аппаратной поддержки доступа к невыровненным восьмибайтовым числам, процессор генерирует исключение при каждом обращении к такому числу. Операционная система перехватывает исключение и выполняет выравнивание вручную. Следующий график иллюстрирует падение производительности, и когда оно происходит:

Рис. 9. Сравнение времени работы при обработке числами различного размера

Падение быстродействия при обращении к невыровненным 2- и 4-байтовым числам просто меркнет на фоне падения быстродействия при обращении к невыровненным 8-байтовым числам, поэтому «отрежем» его верхнюю часть:

Рис. 10. Сравнение времени работы при обработке числами различного размера #2

А теперь более пристально посмотрим на график и сравним скорость выполнения программы при обращении к 8-байтовым числам, выровненным по 4-байтовой границе:

Рис. 11. Сравнение времени работы при обработке числами различного размера #3

Заметьте, что обращение к 8-байтовым числам, выровненным по 4-байтовой и 12-байтовой границе, медленнее, чем чтение тех же данных, 4- или даже 2-байтовыми числами. Несмотря на то, что PowerPC имеет аппаратную поддержку работы с 8-байтовыми числами, выровненными по 4-байтовой границе, вам все равно приходится платить временем выполнения программы за доступ по адресам, не кратным восьми. К счастью, эта плата не настолько велика, как при доступе к 8-байтовым числам, выровненным по 1-, 2-, 3-, 5-, 6- и 7-байтовым границам, но мораль в том, что доступ к невыровненной памяти быстрее при работе с числами меньшего размера.

Атомарность

Все современные процессоры предоставляют инструкции атомарного доступа к данным. Эти специальные инструкции являются ключевыми при реализации различных примитивов синхронизации, необходимых для контроля доступа к данным из нескольких одновременно выполняющихся программ (потоков). Как нетрудно догадаться по их имени, выполнение атомарных инструкций не должно прерываться во время их выполнения — именно это свойство делает их просто незаменимыми при реализации объектов синхронизации.

Отсюда вытекает требование передавать атомарным инструкциям только адреса, выровненные как минимум по 4-байтовой границе — иначе корректность их работы не может быть гарантирована. Причина этого кроется в тесной зависимости атомарных инструкций от подсистемы виртуальной памяти.

Если адрес не выровнен, то требуется как минимум две операции доступа к памяти. Но что произойдет, если требуемые нам данные находятся на границе двух страниц виртуальной памяти? Вполне вероятна ситуация, когда первая страница будет находиться в оперативной памяти, а вторая будет выгружена на диск. В таком случае при доступе к данным во время выполнения атомарной инструкции будет сгенерировано прерывание Page fault, что приведет к передаче управления подсистеме виртуальной памяти, отвечающей за подкачку выгруженных на диск страниц в память, а, следовательно, нарушению атомарности инструкции. Чтобы устранить возможность возникновения подобной ситуации, и 68K, и PowerPC требуют, чтобы все данные, к которым впоследствии будет производиться атомарный доступ, были выровнены по 4-байтовой границе.

К сожалению, PowerPC не генерирует исключение, когда встречает инструкцию атомарной записи по невыровненному адресу. Вместо этого, он просто оставляет данные без изменения. Это может привести к довольно неприятным последствиям, т. к. многие атомарные функции написаны так, что после неудачной записи повторяют свою попытку снова и снова в предположении, что в данном случае ресурсом завладел кто-то другой, что в итоге приводит к «зависанию» программы.

Выравнивание в структурах

Рассмотрим следующую структуру:

Листинг 5. Обычная структура

typedef struct char a; 
long b;
char c;
> Struct;

Как вы думаете, какой размер данная структура занимает в памяти компьютера? Многие программисты ответят «6 байт». Это вполне логично: один байт для a , четыре байта для b и еще один байт для c . 1 + 4 + 1 = 6. Если следовать данным рассуждениям, то такая структура должна располагаться в памяти следующим образом:

Тип поля Имя поля Смещение поля Размер поля Конец поля
char a 0 1 1
long b 1 4 5
char c 5 1 6
Всего байт: 6

Однако, если вы «попросите» ваш компилятор выдать размер данной структуры при помощи sizeof( Struct ) , то, скорее всего, получите величину больше чем 6, вероятнее всего 8, а возможно даже и целых 24 байта. Этому есть две причины: обратная совместимость и эффективность.

Итак, обратная совместимость. Помните 68000-процессор с гранулярностью доступа к памяти в два байта, который генерировал исключение при обращении к невыровненным адресам? Если бы при такой организации структуры вы попытались обратиться к полю b , то вы обратились бы по невыровненному адресу. В итоге, если отладчик у вас не установлен, Mac OS отобразила бы вам диалог с сообщением о критической ошибке и всего одной кнопкой «Перезагрузиться». Вряд ли такое сообщение доставит много радости пользователю, особенно если у него остались несохраненные данные!

Поэтому, вместо того, чтобы располагать поля в структурах так, как программист видит их в описании структуры, компилятор вставляет «лишние» данные между ее полями, чтобы все поля располагались по выравненным адресам:

Тип поля Имя поля Смещение поля Размер поля Конец поля
char a 0 1 1
выравнивание 1 1 2
long b 2 4 6
char c 6 1 7
выравнивание 7 1 8
Всего байт: 8

Сегодня, когда 68020 производится с поддержкой доступа к невыровненным данным, это может показаться излишним, но не надо забывать про производительность.

А вторая причина — как раз производительность. Сегодня PowerPC хорошо работает с данными, выравненными по 2-байтовой границе, но еще лучше он работает с данными, выравненными по 4-байтовой границе. Вам, возможно, и нет необходимости заботиться о классическом 68000, но о потенциальном снижении производительности на два порядка при доступе к невыровненным полям типа double явно стоит! Именно поэтому компиляторы в обязательном порядке самостоятельно выравнивают все поля внутри структур.

Заключение

  • Ваши программы могут работать значительно медленнее, чем могли бы, если они делают много обращений к невыровненным данным, т. к. при их выполнении процессор будет вынужден выполнять лишнюю работу.
  • Ваши программы могут «зависать», если вы размещаете объекты синхронизации по невыровненным адресам.
  • Есть вероятность, что вы не оптимально размещаете поля внутри структур, что приводит к некоторому снижению скорости работы программы, а также может быть критично в случае большого дефицита оперативной памяти (прим. переводчика).

Русский [ править ]

Приставка: вы-; корень: -равн-; суффиксы: -ива-ниj; окончание: [Тихонов, 1996] .

Произношение [ править ]

  • МФА: [ vɨˈravnʲɪvənʲɪɪ̯ə ]

Семантические свойства [ править ]

Значение [ править ]
  1. действие по значению гл. выравнивать, выровнять, также выравниваться, выровняться; придание чему-либо ровности ◆ Прочное приклеивание набора к основе достигается лишь при равномерной толщине облицовки, которую получают выравниванием мозаики. Татьяна Матвеева, «Реставрация столярно-мебельных изделий», 1988 г. [НКРЯ]
  2. действие по значению гл. равнять, приведение каких-либо объектов к равному состоянию ◆ Вместе с тем, благодаря внедрению новых информационных технологий, сегодня наблюдаются тенденции постепенного выравнивания технического уровня почтовых систем разных стран. «Денежные переводы мигрантов — фактор инновационного развития мировой финансовой инфраструктуры», 2004 г. [НКРЯ]
  3. полигр. то же, что выключка; выстраивание строк текста в соответствии с заданным стилем ◆ Отсутствует пример употребления (см. рекомендации ).
Синонимы [ править ]
Антонимы [ править ]
Гиперонимы [ править ]
Гипонимы [ править ]

Родственные слова [ править ]

Этимология [ править ]

Происходит от гл. выравнивать, из вы- + равный, далее от праслав. *orvьnъ(jь) , от кот. в числе прочего произошли: русск.-церк.-слав. равьнъ , равьныи «ровный, гладкий, сходный, равный»; производн. с суфф. -ьnъ от *orvo-, *orves-; восходит к праиндоевр. *ereu-: *reue-: *rū-: *rewes- «открывать, раскрывать, делать пространным». Соответствия: др.-прус. arwis «настоящий, определенный», авест: ravah- «свободное пространство, простор», ravasčarāt «то, что движется на свободе», лат. rus, ruris земля, поле, сельское поместье, деревня», др.-в.-нем. rūm «пространство, помещение». См. ровный. Использованы данные этимологического словаря А. К. Шапошникова; см. Список литературы.

Фразеологизмы и устойчивые сочетания [ править ]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *