![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#71 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]()
Даже если не говорить об оптимизации - компилятору банально нет смысла это делать. Менять esp в конце итерации, чтобы вернуть его на место вначале - абсолютно бессмысленное действие. Это будет выглядеть примерно так -
Код:
|
![]() |
![]() |
![]() |
#72 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
![]() а вот даже базовая оптимизация делает примерно так: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#73 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Всегда думал, что стек выделяется потоку в единственном экземпляре один раз при создании, а дальше идут только прыжки по стеку.
Вход в тело функции - прыжок. выход - прыжок. Сама память уже не выделяется и не удаляется Цитата:
Программист на с++ не должен: 1. Уповать на компилятор. 2. Думать в терминах другого языка программирования. Он должен решать задачи максимально эффективным способом на своём уровне, при помощи своего языка. Вынеси переменную за тело цикла - и ни с кем не имей никаких проблем. Оставь её в теле цикла - и беги учить ассемблер, что бы теперь следить за каждым компилятором, оптимизировал ли он? Не было ли нерационального падения производительности? Что проще? |
|
![]() |
![]() |
![]() |
#74 | ||||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
оно же выделение памяти в стеке. Цитата:
но такие оптимизации проводят все компиляторы современные. Цитата:
Код:
![]() Цитата:
![]() Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||||
![]() |
![]() |
![]() |
#75 | |||
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
Цитата:
Цитата:
Последний раз редактировалось netrino; 25.12.2011 в 16:48. |
|||
![]() |
![]() |
![]() |
#76 | |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#77 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
А ну да, привязываться и запиливаться под конкретный камень/ось/компилятор. Ну-ну. И там, где проще тупо создать переменную за циклом, и не париться - проявлять чудеса академических знаний и по части компилятора, и по части ассмы, и по части камня, да? Это у вас такой подход к программированию на с++ |
|
![]() |
![]() |
![]() |
#78 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
Ну а если речь идёт о простом прикладном программировании, то даже если вдруг компилятор сдуру будет выделять память каждый раз при входе в область видимости цикла, то это будет микрооптимизацией в контексте задачи и не даст никакого прироста производительности. |
|
![]() |
![]() |
![]() |
#79 | |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
![]() Цитата:
Во вторую очередь, если программист на C++ хочет добиться максимальной производительности от конкретного куска кода - он должен хорошо представлять принцип работы своего компилятора и особенности той архитектуры, под которую пишет. В особенности архитектуры, в частности, входит и хотя бы базовое знание ассемблера. Да, и никуда от этого не деться - простым механическим применением заученных догм вроде "всегда выноси переменные из цикла" тут не обойтись. К тому же границы применимости всех пэтих вещей подробно описаны у того же Саттера, например. И хороший программист на C++ даже совсем без знания ассемблера (если допустить гипотетическую вероятность существования такового) должен их чувствовать. |
|
![]() |
![]() |
![]() |
#80 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
![]() Цитата:
![]() любой компилятор переработает этот цикл. вообще если хотите, можете вынести в for-init секцию. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
PopupMenu со мной не дружит | Жигилий_Ульяна | Компоненты Delphi | 5 | 25.12.2008 11:04 |
проблемы с select или со мной... | smoke888 | JavaScript, Ajax | 2 | 23.09.2008 19:02 |