реклама на сайте
подробности

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Размер unsigned int или int Keil4.5
andrewlekar
сообщение Jun 7 2012, 06:40
Сообщение #46


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
А при чем тут придет и не поймет rolleyes.gif Я беру к себе на работу только тех, кто способен понимать и разобраться. Тогда и Вы ответьте на вопрос: зачем тогда столько "фишек" и примочек в компиляторе? Вы этим не пользуетесь?

Вы же сами наблюдали, как несколько человек с первого взгляда не поверили, что компилятор умеет паковать отдельные переменные. Придёт новый человек и тоже потратит время и нервы на то, чтобы снова выяснить то же самое. Нормальные люди, если требуется, пакуют структуры и пишут комментарии, для чего это делается. Фишки и примочки компилятора реализованы для того, чтобы:
1. Соответствовать стандарту языка. Стандарт языка может при этом содержать совершенно неадекватные конструкции и предположения. Но это стандарт и нужно соответствовать.
2. Для обхода узких мест.
3. Организация данных для соответствия неким стандартам. Например, упаковка данных для DMA или передачи по TCP.

Так что да, я фишками и примочками компилятора не пользуюсь без необходимости. А такой необходимости практически никогда не появляется, так как я закладываю заведомо способный реализовать задачу процессов, заведомо достаточное количество памяти, стандартные среды передачи и стандартные библиотеки для работы со всем этим добром.
В наше время, эффективный инженер - это не Левша и не Кулибин, а человек, способный качественно и в срок решить поставленную задачу, способный организовать поддержку своего решения и расширения функционала.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 07:04
Сообщение #47


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798



Цитата(andrewlekar @ Jun 7 2012, 09:40) *
Вы же сами наблюдали, как несколько человек с первого взгляда не поверили, что компилятор умеет паковать отдельные переменные. Придёт новый человек и тоже потратит время и нервы на то, чтобы снова выяснить то же самое. Нормальные люди, если требуется, пакуют структуры и пишут комментарии, для чего это делается. Фишки и примочки компилятора реализованы для того, чтобы:
1. Соответствовать стандарту языка. Стандарт языка может при этом содержать совершенно неадекватные конструкции и предположения. Но это стандарт и нужно соответствовать.
2. Для обхода узких мест.
3. Организация данных для соответствия неким стандартам. Например, упаковка данных для DMA или передачи по TCP.

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

Вы все правильно говорите и занимаете твердую позицию. Ладно. Но мне такая позиция не подходит. Знаете почему? Вокруг меня, кого я знаю, кроме моих сотрудников, никто не пользуется например DMA. А зачем? Вот аргументы, похожие на Ваши. Таких задач не появляется, все и так работает, памяти хватает, скорости тоже и т.д и т. п. Это позиция не для меня. Если такая возможность есть - нужно ее использовать. И знать где, как и правильно. И это - максимальная эффективность. А пытаться обходить... Ну знаете, обойти то все можно. Как раз вот это - кулибин. Не знает языка, не знает компилятора, всех его расширений -но выкрутился, решил задачу. Да еще так, что в ней может разобраться такой же кулибин без глубоких знаний. Я не в Вашу сторону и никого не хочу из публики обидеть, никаких личностей. Мой стиль им оих сотрудников - решать задачу используя все возможности в нужном месте естественно вплоть до недокументированных функций, если это работает корректно.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jun 7 2012, 07:22
Сообщение #48


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Цитата(TAutomatic @ Jun 7 2012, 10:18) *
Давайте жить реалиями сегняшнего дня. В основном все уже имеют дело с микроконтроллерами с линейным адресным пространством. В пределах этого пространства компилятор не занимается перестановкой переменных и оптимизацией их размещения, если на то нет особых инструкций, указаний и т. д. Тоесть, компилятор оптимизирует код с обязательным требованием сохранения его идентичности по функционалу исходному коду и не занимается оптимизацией памяти данных

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

Более того, при определенных настройках тот же GCC может перекладывать данные из секции .data в .bss


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 08:16
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798



Цитата(Dron_Gus @ Jun 7 2012, 10:22) *
С первой частью заявления не соглашусь. Пространство хоть и линейно, но это не гарантирует одинаковое время доступа и одинаковое количество инструкций для доступа в ряде случаев.
Соответственно оптимизатор вполне может перетасовать данные, если это обоснованно и даст какой-то профит.

Более того, при определенных настройках тот же GCC может перекладывать данные из секции .data в .bss

Послушайте, чесговоря нет времени на такого рода диспут, но когда пишут совершенно непонятные для меня вещи, хочется всегда спросить: откуда вы это взяли?!!! Ну откуда вы взяли что время доступа может быть разны, если переменные размещаются в ОЗУ? Мы же не ведем речь о переменных и сразу о константах, которые размещаются в адресном пространстве кода? Ну я вот хочу знать того, чего не знаю. Покажите мне не на пальцах, а на конкретном примере. И еще, какие такие настройки компилера позволят две однородные переменные без инициализации на стадии линковки или обе с инициализацией, расположенные в одном программном модуле последовательно друг за другом разнести по разным секциям? Пожете показать, как Вы это делаете? rolleyes.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 7 2012, 09:08
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(TAutomatic @ Jun 7 2012, 14:16) *
Ну откуда вы взяли что время доступа может быть разны, если переменные размещаются в ОЗУ? Мы же не ведем речь о переменных и сразу о константах, которые размещаются в адресном пространстве кода? Ну я вот хочу знать того, чего не знаю. Покажите мне не на пальцах, а на конкретном примере.

Позвольте встрять? wink.gif

Кроме внутреннего ОЗУ, к контроллеру может быть подцеплено внешнее, с другим временем доступа.
Даже если есть только внутреннее, то в некоторых процессорах есть разные RAM с разным быстродействием, расположенные на разных шинах.
Или, к примеру: внутреннее ОЗУ разбито на банки (непрерывно расположенные в адресном пространстве), и одна из переменных - в одном банке, другая - в другом, а во второй банк как раз идёт интенсивное DMA (с приоритетом контроллера DMA) - здесь разница во времени доступа может быть ОЧЕНЬ большой.
Даже если банки ОЗУ в несмежных областях - линкер (при соотв. опциях) может разбить выходные секции на неск. несмежных областей.
Для каких-то областей может быть включено/выключено кеширование.
Или (типичная оптимизация IAR for ARM): функция работает с неск. статическими переменными - IAR заносит в некий базовый регистр указатель на область памяти, которая включает большую часть этих переменных и адресует их через этот базовый + смещение, а одна переменная - далеко от остальных, разрядности смещения не хватает и для обращения к ней компилятору приходится вставлять доп. инструкции загрузки адреса этой переменной в регистр - соответственно доступ к этой переменной будет дольше.

Перетасовка переменных оптимизатором - это большой гуд. ПО не должно привязываться к взаимному расположению переменных (конечно это не касается внутри структур).
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Jun 7 2012, 09:20
Сообщение #51


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Цитата(jcxz @ Jun 7 2012, 13:08) *
Позвольте встрять? wink.gif

Или (типичная оптимизация IAR for ARM): функция работает с неск. статическими переменными - IAR заносит в некий базовый регистр указатель на область памяти, которая включает большую часть этих переменных и адресует их через этот базовый + смещение, а одна переменная - далеко от остальных, разрядности смещения не хватает и для обращения к ней компилятору приходится вставлять доп. инструкции загрузки адреса этой переменной в регистр - соответственно доступ к этой переменной будет дольше.

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

За меня уже ответили. Спасибо sm.gif

К тому же GCC при определнных опциях может перемещать переменные явно инициализированные нулем (т.е. те, которые должны бы попасть в секцию .data) в облась .bss. Профит от этого, я надеюсь, очевиден.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 09:40
Сообщение #52


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798



Цитата(jcxz @ Jun 7 2012, 12:08) *
Позвольте встрять? wink.gif

Кроме внутреннего ОЗУ, к контроллеру может быть подцеплено внешнее, с другим временем доступа.
Даже если есть только внутреннее, то в некоторых процессорах есть разные RAM с разным быстродействием, расположенные на разных шинах.
Или, к примеру: внутреннее ОЗУ разбито на банки (непрерывно расположенные в адресном пространстве), и одна из переменных - в одном банке, другая - в другом, а во второй банк как раз идёт интенсивное DMA (с приоритетом контроллера DMA) - здесь разница во времени доступа может быть ОЧЕНЬ большой.
Даже если банки ОЗУ в несмежных областях - линкер (при соотв. опциях) может разбить выходные секции на неск. несмежных областей.
Перетасовка переменных оптимизатором - это большой гуд. ПО не должно привязываться к взаимному расположению переменных (конечно это не касается внутри структур).

Рабята, ну я Вас умаляю... rolleyes.gif Ну Вы что, читать не умеете? Я же ясно написал, две переменные, одинаково объявленные и т.д. Вам, что, все это пустой звук или есть просто желание поговорить? rolleyes.gif Две переменные, объявленные одинаково уж точно не могут попасть одна во внутреннее ОЗУ, вторая во внешнее, что бы иметь разное время доступа. Ну кто этого не понимает? Все остальное и комментировать нет смысла. Вам уже aaarrr выше в этой теме написал - размещение переменных, в том числе акккуратность этого размещения- это задача программиста. И я в этом согласен. А вот аккуратностью размещения кода занимается компилятор, а затем оптимизатор. Об этом даже в Википедии почитать можно. Там нет ни слова об оптимизации данных. Судя по-всему, никто из написавших выше никогда не проверял, что же реально компилятор и оптимизатор творят с переменными, но, основываясь на каком то внутреннем понимании этого процесса rolleyes.gif пытается утверждать, что так оно и есть.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 7 2012, 10:02
Сообщение #53


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(TAutomatic @ Jun 7 2012, 12:40) *
Две переменные, объявленные одинаково уж точно не могут попасть одна во внутреннее ОЗУ, вторая во внешнее, что бы иметь разное время доступа. Ну кто этого не понимает?
Я.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 7 2012, 10:10
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(TAutomatic @ Jun 7 2012, 15:40) *
Рабята, ну я Вас умаляю... rolleyes.gif Ну Вы что, читать не умеете? Я же ясно написал, две переменные, одинаково объявленные и т.д. Вам, что, все это пустой звук или есть просто желание поговорить? rolleyes.gif Две переменные, объявленные одинаково уж точно не могут попасть одна во внутреннее ОЗУ, вторая во внешнее, что бы иметь разное время доступа. Ну кто этого не понимает?

Меня умолять не надо - Вы почитайте описание на любой компоновщик. Я вам вроде ясные примеры привёл.
Ничто не мешает компоновщику раскидать одноимённые входные секции (к примеру - секции .bss) по разным регионам памяти при наличии соответствующего ключа в конфигурации.

Цитата(TAutomatic @ Jun 7 2012, 15:40) *
Судя по-всему, никто из написавших выше никогда не проверял, что же реально компилятор и оптимизатор творят с переменными, но, основываясь на каком то внутреннем понимании этого процесса rolleyes.gif пытается утверждать, что так оно и есть.

Вы сами-то хотя-бы раз заглядывали в ассемблерные листинги после компилятора? Поинтересуйтесь вместо того чтобы писать тут ерунду.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 7 2012, 10:16
Сообщение #55


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(TAutomatic @ Jun 7 2012, 12:40) *
занимается компилятор, а затем оптимизатор. Об этом даже в Википедии

Покажите, где написано (в Википедии, или еще где-то), что есть некий зверь, именуемый "оптимизатором", который занимается размещением то ли кода, то ли данных.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 7 2012, 10:17
Сообщение #56


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(TAutomatic @ Jun 7 2012, 15:40) *
Рабята, ну я Вас умаляю...

Может, умОляю? Иначе смысл какой-то стрёмный...
bb-offtopic.gif
Я вот читаю, и, честно говоря, немного офигеваю. Тема начинается с абсолютно ламерского вопроса, а спустя буквально пару страниц топикстартер уже с важным видом всех поучает. Может, всё же прислушаться к мнению более опытных товарищей? Тем более, что уже и пример перестановки компилятором переменных привели, и даже с листингом.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 7 2012, 10:20
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Jun 7 2012, 16:16) *
Покажите, где написано (в Википедии, или еще где-то), что есть некий зверь, именуемый "оптимизатором", который занимается размещением то ли кода, то ли данных.

Википедия это конечно АВТОРИТЕТ! Любой TAutomatic знает w00t.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 7 2012, 10:26
Сообщение #58


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(TAutomatic @ Jun 7 2012, 09:18) *
Все правильно, спасибо за цитату rolleyes.gif Теперь попытаюсь Вам концептуально разъяснить в чем дело.

Вы не о том возражаете по цитате rolleyes.gif
Два массива могли бы оказаться где угодно, а не друг рядом с другом.
Go to the top of the page
 
+Quote Post
TAutomatic
сообщение Jun 7 2012, 10:27
Сообщение #59


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 11-12-11
Пользователь №: 68 798



Цитата(AHTOXA @ Jun 7 2012, 13:17) *
Может, умОляю? Иначе смысл какой-то стрёмный...
bb-offtopic.gif
Я вот читаю, и, честно говоря, немного офигеваю. Тема начинается с абсолютно ламерского вопроса, а спустя буквально пару страниц топикстартер уже с важным видом всех поучает. Может, всё же прислушаться к мнению более опытных товарищей? Тем более, что уже и пример перестановки компилятором переменных привели, и даже с листингом.

Ух ты, как вас уже много высказаться rolleyes.gif Пример? Автор примера о перстановке переменных что то пропал после моего вопроса, как он так сделал rolleyes.gif
Go to the top of the page
 
+Quote Post
exeron
сообщение Jun 7 2012, 10:33
Сообщение #60


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 14-06-06
Пользователь №: 18 062



Какой упоротый попался... Вам уже цитату из Шилдта привели, чего еще надо?
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 22:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.12708 секунд с 7
ELECTRONIX ©2004-2016