one_eight_seven 3 27 мая, 2020 Опубликовано 27 мая, 2020 (изменено) · Жалоба 3 minutes ago, haker_fox said: Хорошо. А как быть с Майерсом? Им почему-то любят щеголять... Применим он при программировании для встраиваемых сиситем? А я не знаю: я его книги не читал. Взглянул сейчас - есть книга и по embedded у него. Но, чтобы сказать, полезно или нет - надо читать. Изменено 27 мая, 2020 пользователем one_eight_seven Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 1 час назад, haker_fox сказал: Но он говорит, что "Майерс больше заслуживает мнения". Забавны такие люди, однозначно. Зависимые на 100% от каких-то Майерсов, а не от своей головы =) Заявлять о каких-то специфичных вещах, зависимых от конкретной архитектуры (а также ABI, и даже, скорее всего, продвинутости оптимизатора), обобщая их и подводя под одно святое правило, чистой воды пердеж в лужу P.S. Лично я стараюсь не вступать в дискуссии с коллегами, когда видно, что "Майерсы" это первый (и, видимо, последний) аргумент против железных пруфов по любой тематике)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 2 часа назад, haker_fox сказал: откуда эта связь, что если ссылка, то обязательно нужно адрес загрузить? Вернее, с точки зрения компилятора, почему такое отличие ссылки от передачи по значению? Хорошая статья про ссылки и указатели. В чем похожи и чем отличаются. А рекомендация Мейерса - это, по сути, перефразированная: используйте передачу по ссылке (указателю) для больших объектов, а по значению - для малых. Т.к. ссылка на объект, размером от регистра ядра и менее будет работать не быстрее, чем передача его по значению. Т.е. выгоды для малых объектов от передачи их в функцию по ссылке/указателю не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 35 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 20 minutes ago, Arlleex said: Забавны такие люди, однозначно. Зависимые на 100% от каких-то Майерсов, а не от своей головы =) Заявлять о каких-то специфичных вещах, зависимых от конкретной архитектуры (а также ABI, и даже, скорее всего, продвинутости оптимизатора), обобщая их и подводя под одно святое правило, чистой воды пердеж в лужу P.S. Лично я стараюсь не вступать в дискуссии с коллегами, когда видно, что "Майерсы" это первый (и, видимо, последний) аргумент против железных пруфов по любой тематике)) Полностью поддерживаю. Когда в голове пусто, то и Майерсы не помогут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 1 час назад, haker_fox сказал: Хорошо. А как быть с Майерсом? Им почему-то любят щеголять... Применим он при программировании для встраиваемых сиситем? Майерс очень хорошо понимает, как устроены плюсы. Поэтому почитать его весьма полезно. Понятное дело, что в случае встраиваемых систем может быть своя специфика, и её надо учитывать. Но в целом, с Майерсом ваш код будет лучше, чем без :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NStorm 0 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 3 часа назад, Arlleex сказал: Смотреть ABI соглашения о вызовах для конкретной архитектуры и исходя из этого принимать решение. Вот имхо самый правильный тезис - кратко и достоверно. Ключ именно в calling convention. Как можно что-то "универсальное" утверждать, если соглашений о вызове даже в рамках одного компилятора может быть несколько. И соглашения о вызовах к стандарту C отношения не имеют афаик. Поэтому у каждой архитектуры, каждого компилятора - свои варианты могут быть. Конечно на деле их не так много и все придерживаются примерно одного. Но никто не заставляет вроде... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 52 минуты назад, NStorm сказал: Ключ именно в calling convention. Как можно что-то "универсальное" утверждать, если соглашений о вызове даже в рамках одного компилятора может быть несколько. Вы можете привести/придумать пример соглашения о вызовах, при котором структуру в 100 байт выгоднее передавать по значению, чем по ссылке? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NStorm 0 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба Легко - на архитектуре с 800-битными регистрами. ) Ну кто сказал, что речь о реальном железе? Также как никто и не говорил о 100-байтных структурах до этого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 27 мая, 2020 Опубликовано 27 мая, 2020 · Жалоба 12 минут назад, NStorm сказал: Легко - на архитектуре с 800-битными регистрами. ) Ну кто сказал, что речь о реальном железе? Также как никто и не говорил о 100-байтных структурах до этого. Даже на такой архитектуре не будет выгоднее. Максимум - вровень. А про то, что ответ на вопрос "как лучше передавать аргументы в функцию" зависит от размера аргументов как раз уже несколько человек высказались. В том числе и некий Скотт Мейерс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 мая, 2020 Опубликовано 28 мая, 2020 · Жалоба А почему говорится только о "передавать", а не об "использовать" в функции? Если аргумент в регистре, с ним работа эффективнее, чем вызывать его по адресу каждый раз, сколько понадобится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 28 мая, 2020 Опубликовано 28 мая, 2020 · Жалоба 2 minutes ago, ViKo said: а не об "использовать" в функции? Это подразумевалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serhiy_UA 1 28 мая, 2020 Опубликовано 28 мая, 2020 · Жалоба 14 hours ago, haker_fox said: Экономя стэк и машинное время. Это актуально для прерываний, например. Лучше это быстрее? Для небольших ембедед приложений? А если ничего не передавать, а использовать глобальные переменные или просто макросы, когда размер кода не критичен.... Я в таких случаях делал и ассемблерные вставки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 28 мая, 2020 Опубликовано 28 мая, 2020 · Жалоба 2 minutes ago, Serhiy_UA said: а использовать глобальные переменные или просто макросы, когда размер кода не критичен.... Глобальные переменные не рекомендуется использвать из соображений безопасности, читаемости и надёжности кода. Макросы стараемся уже давно заменить на inline функции и шаблоны. В си++ им не место. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 28 мая, 2020 Опубликовано 28 мая, 2020 · Жалоба 1 час назад, ViKo сказал: Если аргумент в регистре, с ним работа эффективнее, чем вызывать его по адресу каждый раз, сколько понадобится Если аргумент не имеет квалификатора volatile, то ничего не мешает любому вменяемому оптимизатору внутри функции перед первым использованием загрузить его в регистр и в дальнейшем использовать оттуда. Оптимизаторы в сях с плюсами вполне вменяемые, так что "каждый раз" ну никак не будет в реальной жизни. Автор темы тоже вполне вменяемый человек и заподозрить его в отключении оптимизатора было бы глупо. Более того, если аргумент был передан в регистре - компилятор вполне может положить его на стек, если регистр вдруг понадобится для вызова вложенной функции и уже переданный в регистре аргумент будет вызываться "по адресу". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 28 мая, 2020 Опубликовано 28 мая, 2020 · Жалоба 3 minutes ago, Сергей Борщ said: Если аргумент не имеет квалификатора volatile, то ничего не мешает любому вменяемому оптимизатору внутри функции перед первым использованием загрузить его в регистр и в дальнейшем использовать оттуда. Уф! Бальзам на душу!) Просто сколько раз пытаюсь некоторым коллегам на работе объяснить, что цитировать только Майерса нельзя. Нужно учитывать и архитектуру, и возможности компилятора. И, считаю, что нельзя просто так брать, и копировать подходы с "большого брата" на мир встраиваемых систем. Но когда я предлагаю им поизучать регистры процессора, как там вообще всё устроено, на меня смотрят большими глазками и чуть ли не крутят пальцем у виска...РРРР! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться