Про выравнивание данных - страница 2

 

Dmitry Fedoseev:

Вот, пришпиливаю: 

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

 
Vict:

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

Так ведь у вас же с выравниванием, раз такие результаты не получали.  Не означает ли это, что выравнивание используется компилятором выборочно, исходя из потребностей железа? (что и требовалось доказать)
 
Vict:

ЗЫ: если кто тестит, то неплохо пришпиливать свои результаты сюда.

Снимок

 
Alexey Navoykov:
Так ведь у вас же с выравниванием, раз такие результаты не получали.

Там моё выравнивание ни при чём. Там проверка адреса  стекового объекта на кратность 8

Type_name t;
if (getaddr(t) % 8  != 0) {
   Alert("error, exit");
   return;
}  

Была надежда на то, что объекты в стеке размещаются с самым строгим требованием по выравниванию. Тогда можно было бы чего-то там ровнять ручками для ускорения. А теперь всё, это полный фейл - компилятор всё испортит своей непредсказуемостью.

  Не означает ли это, что выравнивание используется компилятором выборочно, исходя из потребностей железа? (что и требовалось доказать)

Приходило в голову. Но х.з., понятия не имею как оно там устроено, и полагаться на такое не стану и никому не советую.


Но мне вот что больше интересно - ну вот кому и для чего так сильно потребовалось читать невыровненные данные? Компилировали всегда с необходимыми добивками, какие были проблемы? К чему было усложнять архитектуру тратя кучу транзисторов на эту сомнительную фигню (и чего там по энергопотреблению тоже вопрос). Не зря же со всякими микроконтроллерами такие фокусы вообще не пройдут https://habr.com/en/post/309144/ (да даже в телефонах проблемы будут, хотя может и туда этот "прогресс" дошёл).

 
Vict:

Но мне вот что больше интересно - ну вот кому и для чего так сильно потребовалось читать невыровненные данные? Компилировали всегда с необходимыми добивками, какие были проблемы? К чему было усложнять архитектуру тратя кучу транзисторов на эту сомнительную фигню (и чего там по энергопотреблению тоже вопрос).

Ну да, и с каменными топорами раньше бегали...   А ничего, что ваше выравнивание ведёт к перерасходу памяти?  Меня например такая перспектива совершенно не устраивает.

Решил тоже прогнать ваш тест - разница около 5% (причём проц тоже довольно старый - core i5  6-летней давности).  Так что всё сводится к проблемам вашего древнего железа.  Про энергопотребление вообще улыбнуло ) Ну давайте ещё сделайте тест на энергопотребление

 
Alexey Navoykov:

Ну язвите, а чего делать, если нет ответа на простой вопрос

Именно при добавлении поддержки dotnet библиотек и было добавлено выравнивание полей структур/классов pack.

Если говорить коротко и просто, то работает оно так:

Для каждого из типов (char, short, int, ...) есть свой allignment (1, 2, 4, байта соответственно) по умолчанию.
Для поля структуры выбирается минимальное из двух выравниваний:  по-умолчанию и заданное пользователем (через pack)

Зачем в dotnet библиотеках используется выравнивание меньше натурального?

Про энергопотребление вообще улыбнуло ) Ну давайте ещё сделайте тест на энергопотребление

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

А ничего, что ваше выравнивание ведёт к перерасходу памяти?  Меня например такая перспектива совершенно не устраивает.

Ничего, если бы это было так критично, то на процессорной заре о выравнивании вообще бы не заморачивались и сразу бы сделали как сейчас. Видимо минусы всё же перевешивают плюсы.

ЗЫ: кстати, чтобы не подумали что я тут защищаю свою приверженность какому-то старью - у меня валяется ноут тоже с каким-то там intel ix, но не пользуюсь, вроде и этого хватает пока.

 
Alexey Navoykov:

А ничего, что ваше выравнивание ведёт к перерасходу памяти?  Меня например такая перспектива совершенно не устраивает.

А вас не пугает, что c# hello world отжирает 7 метров памяти (а сейчас уже больше, наверное)? https://stackoverflow.com/questions/5224020/how-to-minimize-memory-usage-in-windows. А вы тут на спичках экономите. Смешно, честное слово, ну зато там на выравнивание забили, молодцы. Прогресс, это уже не каменные топоры, это высочайшие технологии ))

How to minimize memory usage in windows
How to minimize memory usage in windows
  • 2011.03.07
  • Frank
  • stackoverflow.com
I wrote a hello world program (windows application without any UI) in C#. The release-build excutable doesn't do anything but to Thread.Sleep(50000) //50 seconds. I opened sysinternals (a profiler like task manager...
 
Alexey Navoykov:

Решил тоже прогнать ваш тест - разница около 5%

Старенькая i7ка, разницы не обнаружил ни на обсуждении ни сейчас. своими тестами тоже разницы не обнаружил.

Хотя пытался и думал что она будет.

 
Vict:

А вас не пугает, что c# hello world отжирает 7 метров памяти (а сейчас уже больше, наверное)? https://stackoverflow.com/questions/5224020/how-to-minimize-memory-usage-in-windows. А вы тут на спичках экономите. Смешно, честное слово, ну зато там на выравнивание забили, молодцы. Прогресс, это уже не каменные топоры, это высочайшие технологии ))

Так это ж целая программа, поэтому эти 7 Мб просто минимальный стартовый размер для программы.  А у нас речь о хранении данных.  Мне нужно хранить в памяти допустим 500 Гб,  а из-за вашего грёбанного выравнивания получится 2 Гб.  Просто замечательно!

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

Для поля структуры выбирается минимальное из двух выравниваний:  по-умолчанию и заданное пользователем (через pack) 

Я подозреваю, что он опечатался, имея ввиду "максимальное".  Уточните у него.
 
Vict:

А вас не пугает, что c# hello world отжирает 7 метров памяти (а сейчас уже больше, наверное)? https://stackoverflow.com/questions/5224020/how-to-minimize-memory-usafpLNMckege-in-windows. А вы тут на спичках экономите. Смешно, честное слово, ну зато там на выравнивание забили, молодцы. Прогресс, это уже не каменные топоры, это высочайшие технологии ))

Ради справедливости - аналогичная плюсовая программа отжирает около 5.8 метров (полный размер занятой вируальной памяти, там куча всяких библиотек - сишная, плюсовая, загрузчик ...). Весьма удивлён - что-то сильно мало для шарпа, подозреваю, что автор говорил о ,например, стеке и куче, как он сам выразился "private bytes". Ну не верится мне, что лишь 7 метров.

Мне нужно хранить в памяти допустим 500 Гб,  а из-за вашего грёбанного выравнивания получится 2 Гб.  Просто замечательно!

Если вы не можете грамотно организовать хранения данных, то может кодить это не ваше? Разбейте большой массив на массивы с одинаковыми требованиями по выравниванию. Придумываете проблему на ровном месте.


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

Да я это давно понял, ещё на первой странице писал - "на новом железе вряд ли есть возможности". Речь то о другом - используют любителей прогресса в хвост и гриву. Сегодня поделки MS поделки стали работать медленно на старом железе (вследствие махинаций с выравниванием, несмотря на проблемы, о которых я несколько раз говорил), а завтра придумают новые супер нужные инструкции, и кончено же старенькие intel ix опять в мусорное ведро. И вы опять с тем же энтузиазмом будете говорить о прогрессе.

В сухом остатке - ни одного вменяемого аргумента в полузу невыровненных данных я не услышал.