![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Red Devil |
![]()
Сообщение
#11
|
![]() Студент ![]() Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Цитата if (++i > k) goto 1branch else goto 2branch Language: cpp if (i++ > k) goto 1branch else goto 2branch Этот пример не удачный, т.к. тут выполняются разные по семантике задачи. я говорил о вменяемом компиляторе, но не бесплатном, в IAR разницы ни какой, я давно про эту особенность Си прочитал, и смотрел результат работы разных компиллеров. в HiTech и IAR нет разницы, просто люди умеют писать оптимизирующие копиллеры. А GNU это бесплатный компиллер, с минимально возможной оптимизацией, как там прочие поживают не в курсе. Так я про это и говорю, что для GNU компилеров делается и это нужно учитывать. Для целочисленного типа и простых итераторах для современных компиляторов разницы не будет, насколько я знаю от программистов, которые делают встроенное ПО для авиации! Я еще только учусь на такого программиста, но встроенное ПО пока что не доверяют. Для итераторов есть и очень существенная, при случае скажи об этом вашем программистам и еще книги посоветуй им почитать про стандартную библиотеку, раз таких основ не знают. Могут так же посмотреть исходные коды STL и подумать, почему там написано так и именно так, и никак иначе. Вот пример, как генерируется код для типов, у которых определены собственные инкрементные операторы ++ (и для итераторов тоже, вне зависимости от компилятора). Вот такой код генерируются для ++a; (69 строк)
А вот такой код для a++ (101 строка)
Вот код на С++, который тестировался :
Сообщение отредактировал Red Devil - 21.7.2008, 16:59 |
|
|
AD |
![]()
Сообщение
#12
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Для итераторов есть и очень существенная, при случае скажи об этом вашем программистам и еще книги посоветуй им почитать про стандартную библиотеку, раз таких основ не знают. Могут так же посмотреть исходные коды STL и подумать, почему там написано так и именно так, и никак иначе. Приколист, однако! ![]() |
|
|
void* |
![]()
Сообщение
#13
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
AD |
![]()
Сообщение
#14
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
прикольно однако. Ты считаешь STL ненадежной? ![]() А стандартные итераторы, как я их понял, это далеко не те, что в stl! еще прикольней ![]() На 1 вопрос ответ: не я так считаю, а таково требование к встроенному софту - stl не использовать! На 2 вопрос: я точно ответить не смогу. Я знаю, что в stl используют динамическую память, что как-раз и не нравится, и чего и боятся при использовании во встроенном софте. Самолет или вертолет не должен в пути отказать! ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
во встроенном ПО стандартных библиотек избегают по причине того что редкий Си компиллер будет компилить только те функции которые нужны, он сунет в бинарь все без разбора.
тотже принтф съедает около 1.5кило памяти программ, сильно накладно. а стандартные итераторы в С++ помоему это как раз и есть STL. |
|
|
AD |
![]()
Сообщение
#16
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
во встроенном ПО стандартных библиотек избегают по причине того что редкий Си компиллер будет компилить только те функции которые нужны, он сунет в бинарь все без разбора. Из-за этого тоже. Но первопричина - как раз динамическая память! Ее боятся, а в stl она повсюду используется! ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Novak |
![]()
Сообщение
#18
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
Этот пример не удачный, т.к. тут выполняются разные по семантике задачи. Эээ.. Ну, а при равных по семантике задачах, например
Нормальный компилятор и не должен в итоге делать различий между инкрементной и декрементной формами. |
|
|
void* |
![]()
Сообщение
#19
|
![]() Программист-самоучка ![]() ![]() ![]() Группа: Участник Сообщений: 429 Регистрация: 4.6.2008 Пользователь №: 193 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
Нормальный компилятор и не должен в итоге делать различий между инкрементной и декрементной формами. а для чего тогда по-твоему вообще создавали две формы этого оператора? чтобы компилятор не делал между ними различий? есть ситуации, в которых предпочтительнее одна форма, есть в которых предпочтительнее другая, но они не должны быть одинаково восприняты компилятором, иначе исчезает весь их смысл |
|
|
Red Devil |
![]()
Сообщение
#20
|
![]() Студент ![]() Группа: Участник Сообщений: 68 Регистрация: 6.6.2008 Из: Saint-Petersburg Пользователь №: 194 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Нормальный компилятор и не должен в итоге делать различий между инкрементной и декрементной формами. Согласен, для простых типов современные компиляторы нормально отработают. Когда же операторы ++ определены программистом (а это обычно итераторы) - компилятор не знает разницы, может программист по своему реализовал оператор ++ и у них асболютно разная логика, поэтому он ничего не будет оптимизировать. Поэтому писать ++i нужно вводить в привычку, и это является хорошем тоном/стилем в программировании на С++. Мне во всяком случае достаточно посмотреть как реализован цикл for, чтобы определить базовые навыки программиста. Сообщение отредактировал Red Devil - 22.7.2008, 13:58 |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 24.7.2025, 9:10 |