|
|
||||||
Почему поинтер обнуляется ?30.04.2019, 02:01. Показов 8403. Ответов 118
Метки нет (Все метки)
0
|
||||||
| 30.04.2019, 02:01 | |
|
Ответы с готовыми решениями:
118
Почему все обнуляется??? Почему мой указатель обнуляется? Почему не обнуляется указатель через функцию? |
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 14.05.2019, 18:02 | ||
|
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,307
|
||
| 14.05.2019, 18:10 | ||
|
Для фундаментального типа, т.е. типа, поддерживаемого на уровне компилятора, в контексте, где результат ++ игнорируется, любой вменяемый компилятор всегда сгенерирует соверешенно идентичный - оптимальный - код и для префиксного ++, и для постфиксного ++. Количество инструкций будет совершенно идентичным.
1
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,307
|
|||
| 14.05.2019, 18:31 | |||
|
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 14.05.2019, 19:02 | |
|
alexbmd, вы не увидите разницы ни при каких-либо явно включённых оптимизациях, ибо для фундаментальных типов инкремент (+1) выполнит процессор и здесь не может быть никаких отличий.
Например возьмём цикл for (int i = 0; i < 10000; i++), здесь операция i++ хорошо определена и нам точно известен порядок вычисления по отношению к остальным выражениям, до и после i++ и в любом случае все что здесь нам надо это увеличить i на 1 и именно это мы всегда получим в сгенерированном коде, внезависимости от того будет ли это постфиксный или префиксный инкремент.Более того в некоторых случаях в циклах префиксный инкремент может ввести зависимость от данных в ваш код
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 14.05.2019, 19:10 | |
|
0
|
|
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 14.05.2019, 19:14 | |
|
zayats80888, Game Engine Architecture (3rd edition), там есть топик посвящённый этому.
0
|
|
|
|
|
| 14.05.2019, 19:18 [ТС] | |
|
просто читал что ранее когда я был молодой, синтактический сахар использовали как раз для того что была разница как прибавлять. потом уже компилятор научился ассемблировать одинаковый код. но я подумал отключив все оптимизации компилятора пост и пре инкремент в какихто особых случаях разница будет. ну нет так нет. доверимся компилятору
спасибоAzazel-San, ну вот for плохой пример для этого. тут разницы нету и так и так for(;;++i) print i for(;;i++) print i //результат одинаковый хотя бы вот for(;++i; ) print i for(;i++; ) print i //тут я думал может получиться разный код (ну только более сложный пример нужен конечно). но нет так нет ![]() просто почемуто именно сишник очень любят префиксный инкремент. хотя для большинства простых задач нужен как раз постфикс. ++i чаще для простых задач только путаницу добовляет/читаемость кода падает. понятно что можно любой код подстроить до правильного результата. ну это имхо конечно
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||
| 14.05.2019, 19:21 | |||
Повременю пока. Ну в двух словах, если это возможно, объясните.Добавлено через 2 минуты
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||||||||||
| 14.05.2019, 19:55 | |||||||||||
process_array() мы используем постинкрементный оператор, p++. Это тонкая, но иногда важная оптимизация. Оператор preincrement увеличивает содержимое переменной до того, как ее (теперь измененное) значение используется в выражении. Оператор postincrement увеличивает содержимое переменной после ее использования. Это означает, что написание ++p вводит зависимость данных в ваш код - CPU должен дождаться завершения операции инкремента, прежде чем его значение можно будет использовать в выражении. На глубоко конвейерном процессоре, это приводит к остановке. С другой стороны, с p++ нет зависимости. Значение переменной можно использовать немедленно, а операция приращения может произойти позже или параллельно с ее использованием.Конечно, в выражении «update» цикла for не должно быть различий между пре- и постинкрементами. Это потому, что любой хороший компилятор распознает, что значение переменной не используется в update_expr. Но в тех случаях, когда используется значение, постинкремент предпочтительнее, поскольку он не приводит к задержке в конвейере CPU.Добавлено через 11 минут И как вы определяли разный код здесь или нет? Позволю себе уже во второй раз за сегодня скопировать цитату, которую мне сказали:
1
|
|||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 14.05.2019, 20:00 | ||
p!=end->p++-><тело цикла, работаем с значением p до инкремента>?
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||
| 14.05.2019, 20:05 | ||
p как оно есть и только потом сделать инкремент.У нас нету зависимости от инкремента, и мы можем сделать некие оптимизации в этом контексте.
1
|
||
|
|
|||
| 14.05.2019, 20:19 [ТС] | |||
|
" дополнительная стоимость копирования итератора может склонить шкалы к предпочтению преинкремента при использовании таких классов в циклах, критичных к производительности" мы можем увидеть разницу. раньше я об этом не задумывался но теперь не удевлюсь если разница таки будет пусть и микроскопическая. Добавлено через 9 минут p=0; p!=end -> p++ -> print p//0 -> p=1 -> p!=end -> p!=end -> ++p -> print p//0 -> p=1 -> p!=end -> вот и Калиграфер говорит "Третий сегмент из заголовка for выполняется в конце каждой итерации." ну там понятно разница в инкременте есть, но в теле лупа оно нам не видно PS: не спора ради а просветления для
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 14.05.2019, 20:23 | |||
|
В теле цикла мы уже будем работать с увеличенным значением. Добавлено через 1 минуту Добавлено через 1 минуту Не по теме: Странно, обновил страницу и мне репутацию списали, хм..
0
|
|||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 14.05.2019, 20:31 | ||
p!=end->p++-><тело цикла, работаем с значением p до инкремента>->p!=end->(т.к. p уже прирастили можно не ожидать, а сразу в тело нырять, где-нибудь параллельно опять прирастим)<тело цикла, работаем с увеличенным в прошлый раз значением p>->(если не прирастили, ожидаем) и т.д.
0
|
||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||||||||||||
| 14.05.2019, 20:50 | |||||||||||||
|
zayats80888, смотрите, вот ключевые фразы:
for:
update_expr - это именно так секция где идет обновление счетчика, обычно мы его хотим видеть в последнем блоке цикла, но это не всегда так, в примере выше я тоже его разместил в конце, просто из-за удобства.И вот если это значение update не используется выхлоп будет одинаковым.И это: Например в чем-то таком:
1
|
|||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||||||
| 14.05.2019, 21:17 | ||||||
|
Не по теме: Надеюсь не задолбал еще :)
0
|
||||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||
| 14.05.2019, 23:31 | ||||
![]() Вот, например что-то такое https://godbolt.org/z/NEYHpe Может, ув. TheCalligrapher, пролил бы свет
1
|
||||
|
|
||
| 15.05.2019, 00:13 | ||
|
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,307
|
||
| 15.05.2019, 00:28 | ||
|
0
|
||
| 15.05.2019, 00:28 | |
|
Почему во время чтения из файла переменная row_i в цикле постоянно обнуляется? Переполнение знаковых целых чисел: почему значение переменной обнуляется, а не записывается младшее значение? Почему массив не обнуляется Не обнуляется таймер почему-то Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|