С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1

Visual Studio 2022 игнорирует модификатор register

24.04.2022, 23:21. Показов 1339. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Прошу помощи у знающих. Читаю букварь по С++, и столкнулся с такой проблемой,
есть такой код:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <windows.h>
#include <ctime>
 
unsigned int i; //не register-переменная
unsigned int delay;
 
using namespace std;
 
int r_avg(int i);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    register unsigned int j;
    long start, end;
    start = clock();
    for (delay = 0; delay < 50; delay++)
        for (i = 0; i < 64000000; i++);
    end = clock();
    cout << "Количество тиков для не register-цикла: ";
    cout << end - start << '\n';
 
    start = clock();
    for (delay = 0; delay < 50; delay++)
        for (j = 0; j < 64000000; j++);
    end = clock();
    cout << "Количество тиков для register-цикла: ";
    cout << end - start << '\n';
   
 
 
 
    return 0;
}

Так вот, если собрать код в Visual Studio 2022, то разница в скорости выполнения кода для register/не register-цикла незначительна, а если собрать тот же код в Dev C++, то скорость выполнения как и положено, для register-цикла почти в два раза быстрее.
И тут собственно вопрос, как уговорить Visual Studio 2022 использовать модификатор register?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2022, 23:21
Ответы с готовыми решениями:

Visual Studio 2010 выборочно игнорирует изменения в коде
Собственно сабж. Жму F5, но студия игнорирует мои изменения в коде и запускает последний успешно скомпилированный билд хоть её никто об...

Visual Studio 2022 vs DevC++
Всем привет! Не так давно начал изучать С++, и всегда пользовался компилятором DevC++ и проблем никогда не было. Но недавно решил...

Расширение для Visual Studio 2022 на фреймворке Visual Studio Community Toolkit
Переписываю свое старое расширение под новую 2022 студию, вот нашел вроде хороший фреймворк:...

18
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
24.04.2022, 23:28
А может дело вообще не в этом? Например разная оптимизация у компиляторов. Учитывая что у вас тут абсолютно пустой цикл, компилятор может его вообще удалить...

Да и вообще не мешало бы сравнить asm код, который генерируется обоими компиляторами...
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
24.04.2022, 23:38
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Так вот, если собрать код в Visual Studio 2022, то разница в скорости выполнения кода для register/не register-цикла незначительна
register для компилятора давно уже имеет статус пробела.
А в последних стандартах и вовсе объявлен как неиспользуемый и зарезервированный на будущие нужны.

Добавлено через 1 минуту
Цитата Сообщение от Dimon0401 Посмотреть сообщение
а если собрать тот же код в Dev C++
код ваших циклов в gcc: https://godbolt.org/z/jafc3KjMW
Assembler
1
2
3
4
        call    clock
        mov     DWORD PTR delay[rip], 50
        mov     rbp, rax
        call    clock
Ваш "замер" вообще является некорректным и никакого отношения к реальности не имеет.
0
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
24.04.2022, 23:38  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Да и вообще не мешало бы сравнить asm код
Эта наука мне еще не известна.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
24.04.2022, 23:38
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Так вот, если собрать код в Visual Studio 2022, то разница в скорости выполнения кода для register/не register-цикла незначительна, а если собрать тот же код в Dev C++, то скорость выполнения как и положено, для register-цикла почти в два раза быстрее.
Вы рассказываете какие-то странные сказки.

Во-первых, в языке С++ уже давно нет никакого "модификатора register".

Во-вторых, никакой разницы в скорости выполнении этих циклов нет ни в одном компиляторе . Время - ноль везде. Это циклы пусты, ничего не делают и полностью выбрасываются из кода компилятором.

Dev-Cpp

Code
1
2
Количество тиков для не register-цикла: 0
Количество тиков для register-цикла: 0
Visual Studio:

Code
1
2
Количество тиков для не register-цикла: 0
Количество тиков для register-цикла: 0
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.04.2022, 23:39
Цитата Сообщение от Dimon0401 Посмотреть сообщение
register
морально устарел


Цитата Сообщение от Dimon0401 Посмотреть сообщение
И тут собственно вопрос, как уговорить Visual Studio 2022 использовать модификатор register?
попробуй скомпилировать релиз
0
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
24.04.2022, 23:43  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы рассказываете какие-то странные сказки.
Ну хз.
Результат из скомпилированного кода в DevC++


Результат из скомпилированного кода в Visual Studio 2022
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
24.04.2022, 23:44
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Ну хз.
->
Цитата Сообщение от hoggy Посмотреть сообщение
попробуй скомпилировать релиз
причем в обоих IDE.

Выше я привел код, который дает GCC. Он просто посчитал, что delay будет равен 50 и выкинул ваши циклы между вызовами clock.
Что касается register, то компилятор сам разберется что и куда положить. И этот самый register на это вряд ли как-то повлияет.
А если вдруг повлияет, то вы всё равно таким кодом не сможете корректно замерить разницу.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
24.04.2022, 23:46
Цитата Сообщение от Dimon0401 Посмотреть сообщение
int r_avg(int i);
Что это и к чему это здесь?

Добавлено через 1 минуту
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Результат из скомпилированного кода в DevC++
Что??? Это же дебаг кофигурацуия! Вы что, скорость работы дебаг кода замеряете?

Как такое в голову могло прийти?
0
24.04.2022, 23:48

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
кофигурацуия
фигокурацуия!

0
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
24.04.2022, 23:49  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что это и к чему это здесь?
А это просто где-то в расчетах вкралась ошибка.
Из прошлого урока кусочек остался(не все из кода убрал), можно не обращать на это внимание.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
24.04.2022, 23:50
Цитата Сообщение от Dimon0401 Посмотреть сообщение
как уговорить Visual Studio 2022 использовать модификатор register?
Никак. https://docs.microsoft.com/en-... w=msvc-170

И вообще уже давно это устарело https://en.cppreference.com/w/... e_duration
1
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
24.04.2022, 23:54  [ТС]
Someone007,
О, спасибо! Коротко и по делу.

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что??? Это же дебаг кофигурацуия! Вы что, скорость работы дебаг кода замеряете?
Я не волшебник, я только учусь, от того и не знаю много. Для этого и спрашиваю!
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.04.2022, 23:54
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Коротко и по делу.
Выше вам тоже вполне по делу отвечали.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
24.04.2022, 23:55
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Коротко и по делу.
Еще раз, не так коротко, но намного больше по делу, так как с первого раза вроде не доходит:

1. В языке С++ уже 5 лет как нет модификатора register. Он остался только в языке С.

2. Ни один компилятор уже давно не принимает во внимание модификатора register, даже если разрешает его использование в коде. Решения о распределении регистров принимаются компилятором самостоятельно, с полным игнорированием ваших модификаторов. Все, что делает модификатор register - это запрещает применение унарного оператора & к переменной.

3. Замеры скорости выполнения отладочной/неоптимизированной конфигурации кода, которыми вы тут занимались - бессмысленная чушь.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
24.04.2022, 23:55
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Я не волшебник, я только учусь, от того и не знаю много.
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Читаю букварь по С++
И в каком же букваре говорят что будет разница?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
25.04.2022, 00:02
Цитата Сообщение от Dimon0401 Посмотреть сообщение
Я не волшебник, я только учусь, от того и не знаю много. Для этого и спрашиваю!
Как же вы тогда так уверенно направо и налево раздаете ярлыки о том, что "по делу", а что не "по делу"?
0
 Аватар для Dimon0401
79 / 62 / 17
Регистрация: 11.11.2019
Сообщений: 286
Записей в блоге: 1
25.04.2022, 00:12  [ТС]
Базовый курс С++ Герберт Шилдт
Ну там как бы и говориться что студия игнорирует ключевое слово register, отсюда и было принято решение использовать DevC++. Ну и естественно так как консоль показала разные результаты одного и того же кода, отсюда и возник данный вопрос!

Добавлено через 6 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как же вы тогда так уверенно направо и налево раздаете ярлыки о том, что "по делу", а что не "по делу"?
TheCalligrapher, Вас это чем-то оскорбило?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12931 / 6799 / 1820
Регистрация: 18.10.2014
Сообщений: 17,210
25.04.2022, 00:27
Цитата Сообщение от Dimon0401 Посмотреть сообщение
TheCalligrapher, Вас это чем-то оскорбило?
"Оскорбило"? С чего бы это вдруг? Нет, лишь озадачило своей самопротиворечивой парадоксальностью. Люди обычно задают вопросы от парадоксальной озадаченности. Вот и я, оказавшись охвачен этим состоянием, вынужден был спросить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2022, 00:27
Помогаю со студенческими работами здесь

Нужен элемент консольное приложение
Мне нужен элемент консольное приложение Но его нет где его могу докочать

Visual Studio 2022 expied
Наконец то visual studio 2022 вышла и стала официальной. Поздравляю всех с тем что она вышла. Она более комфортная чем 2019

Ошибка в visual Studio 2022
Хотел сделать задание на языке Python но выдаёт такую ошибку, пробовал изменить версии языка, ничего не помогает

Visual Studio 2022 на mac
на Mac не открывает проекты. можно ли с этим что-то сделать?

Бесконечная загрузка Visual Studio 2022
я скачаиваю visual studia а потом идет скачка до конца, потом начинает заново качаться с самого начало в первой строчке.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru