Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
thick_int
Заблокирован
#1

Регистровые переменные - C++

20.11.2011, 19:06. Просмотров 1880. Ответов 15
Метки нет (Все метки)

Если некоторая переменная целого типа объявляется со спецификатором register, то это (насколько я понял, кстати правильно это или нет?) всего лишь просьба компилятору поместить эту переменную в регистр процессора (а кстати сколько таких регистров у процессора Core i7?).
А есть ли какой-либо способ узнать, действительно ли эта переменная помещается в регистр или же нет?

Тот же самы вопрос относительно inline функций. Ведь это же тоже всего лишь пожелание сделать функцию inline. То есть можно ли узнать действительно ли компилятор заинлайнил эту функцию или нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 19:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Регистровые переменные (C++):

Сравнение строк (символьные массивы), игнорируя регистровые различия - C++
Я недавно начал изучать С++ и все не как не пойму что не так с моей программой... Задача: Напишите программу, которая предлагает...

Создать программу обработки массивов структур используя структурные переменные и переменные типа объеденения - C++
Создать массив структур, каждая из которых состоит из следующих елементов: факультет, курс, группа, фамилия студента и екзаменационная...

Переменные,значение функции,вспомогательные переменные. - C++
1)Даны переменные A,B,C.Изменить их значения,переместив их содержимое из A-в B,B-в C,C-в A,и вывести новые значения переменных A,B,C. ...

Создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар - C++
Здравствуйте. Необходимо создать бинарное дерево, по правой ветке - переменные типа инт, по левой - 2 переменные типа чар. ругается в...

Переменные - C++
Вот есть переменная: float x=100.0f Что значит в конце буква f ?

Переменные - C++
system( "/*Как нибудь можно здесь использовать переменные типов STRING или CHAR?*/" );

15
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 19:08 #2
Цитата Сообщение от thick_int Посмотреть сообщение
А есть ли какой-либо способ узнать, действительно ли эта переменная помещается в регистр или же нет?
дизассемблировать и посмотреть если откапаешь такую переменную
0
ISergey
Maniac
Эксперт С++
1381 / 892 / 54
Регистрация: 02.01.2009
Сообщений: 2,685
Записей в блоге: 1
20.11.2011, 19:11 #3
Цитата Сообщение от thick_int Посмотреть сообщение
Если некоторая переменная целого типа объявляется со спецификатором register, то это (насколько я понял, кстати правильно это или нет?) всего лишь просьба компилятору поместить эту переменную в регистр
Да.
Цитата Сообщение от thick_int Посмотреть сообщение
(а кстати сколько таких регистров у процессора Core i7?).
Открываем книгу по ассемблеру и смотрим.

Цитата Сообщение от thick_int Посмотреть сообщение
А есть ли какой-либо способ узнать, действительно ли эта переменная помещается в регистр или же нет?
Тот же самы вопрос относительно inline функций. Ведь это же тоже всего лишь пожелание сделать функцию inline. То есть можно ли узнать действительно ли компилятор заинлайнил эту функцию или нет?
в отладчике можно глянуть.
0
thick_int
Заблокирован
20.11.2011, 19:17  [ТС] #4
Цитата Сообщение от Jupiter Посмотреть сообщение
дизассемблировать и посмотреть если откапаешь такую переменную
Это пока для меня еще слишком сложно. Точнее, я просто не знаю, как это делать.
Хотелось бы что-нибудь попроще.
0
ISergey
Maniac
Эксперт С++
1381 / 892 / 54
Регистрация: 02.01.2009
Сообщений: 2,685
Записей в блоге: 1
20.11.2011, 19:20 #5
Тогда вопрос - зачем вам это нужно, если вы не понимаете как это работает?
0
thick_int
Заблокирован
20.11.2011, 19:26  [ТС] #6
Ну почему же не понимаю. Понимаю, что регистровая переменная орабатывается быстрее нежели, чем переменнаяя, размещаемая в оперативной памяти.
Вот поэтому и хотелось узнать больше сведений, нежели чем просто, как это пишется в большинстве учебников, о том, как происходит этот процесс (выделения регистров под целочисленные переемменные).
0
ISergey
Maniac
Эксперт С++
1381 / 892 / 54
Регистрация: 02.01.2009
Сообщений: 2,685
Записей в блоге: 1
20.11.2011, 19:33 #7
Цитата Сообщение от thick_int Посмотреть сообщение
как происходит этот процесс (выделения регистров под целочисленные переемменные).
Ни че там не выделяется.. эти регистры есть всегда..
http://ru.wikipedia.org/wiki/Регистр_процессора
0
thick_int
Заблокирован
20.11.2011, 19:48  [ТС] #8
К словам то че цепляться?
Ну понятно, что там всегда есть регистры. Интересует то, в каких случаях компилятор запихивает ту или иную целочисленную переменную в регистр, а в каких нет.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 19:51 #9
Запихивает тогда, когда считает это нужным. Т.е. когда "запихивание" благоприятно сказывается на производительности. Думать об этом не надо. Использовать спецификатор register тоже не надо. Последние версии студии его просто игнорируют и правильно делают.
0
thick_int
Заблокирован
20.11.2011, 19:59  [ТС] #10
Ну понятно, то есть больше чем в учебниках для учащихся среднего школьного возраста по этому вопросу информации нигде нет.
0
Kastaneda
Jesus loves me
Эксперт С++
4689 / 2893 / 236
Регистрация: 12.12.2009
Сообщений: 7,355
Записей в блоге: 2
Завершенные тесты: 1
20.11.2011, 20:02 #11
На самом слово register можно считать в некоторой степени устаревшим, т.к. сейчас уже не встретишь кода с его использованием. Компиляторы делают так, как считают нужным и программисты полностью полагаются на их выбор.
1
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.11.2011, 20:03 #12
thick_int, вам ответили в предыдущем посте
спецификатор register - достояние времен зарождения языка c
времен когда машины были слабыми, а компиляторы глупыми
сейчас использовать register нет смысла
1
thick_int
Заблокирован
20.11.2011, 20:04  [ТС] #13
И то же самое я так полагаю относится и ко второму вопросу, то есть остается только молиться на компилятор?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
20.11.2011, 20:06 #14
Цитата Сообщение от thick_int Посмотреть сообщение
то есть остается только молиться на компилятор?
остается выставить ему правильные опции
вы кстати наивно думаете, что если скажете, что и где компилятору надо распологать, то код получится эффективней
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 20:07 #15
Цитата Сообщение от thick_int Посмотреть сообщение
то есть больше чем в учебниках для учащихся среднего школьного возраста по этому вопросу информации нигде нет
Информация есть. Но она не нужно знать. Управлять ты этим процессом не можешь (только изменяя параметры оптимизации). Встроенный ассемблер доступен только для х86 программ, но ассемблера ты не знаешь. Т.е. просто забудь про слово register и не отвлекайся на ненужности.
1
20.11.2011, 20:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 20:07
Привет! Вот еще темы с ответами:

Переменные в c++ - C++
Помогите разобраться в теории. Так вот допустим мы создаем переменную в стеке int a; тогда в стеке где то по адресу скажем 004 выделяется...

Переменные - C++
Всем привет, я знаю есть много неизвестного для меня в перменных, есть типы int, float, char, string, bool, но я так же слышал про другие,...

Переменные - C++
Есть глобальная переменная, внутри описания функции я ее меняю ( ну то есть пишу b=i;); После вызова этой функции, другая функция будет...

Динамические переменные - C++
#include<iostream> using namespace std; int main() { int *ptr_number = new int; int *sum = new int(0); cin >>...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru