|
|
||||||
Почему поинтер обнуляется ?30.04.2019, 02:01. Показов 8459. Ответов 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,308
|
||
| 14.05.2019, 18:10 | ||
|
Для фундаментального типа, т.е. типа, поддерживаемого на уровне компилятора, в контексте, где результат ++ игнорируется, любой вменяемый компилятор всегда сгенерирует соверешенно идентичный - оптимальный - код и для префиксного ++, и для постфиксного ++. Количество инструкций будет совершенно идентичным.
1
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|||
| 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,308
|
||
| 15.05.2019, 00:28 | ||
|
0
|
||
| 15.05.2019, 00:28 | |
|
Почему во время чтения из файла переменная row_i в цикле постоянно обнуляется? Переполнение знаковых целых чисел: почему значение переменной обнуляется, а не записывается младшее значение? Почему массив не обнуляется Не обнуляется таймер почему-то Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|