14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
||||||||||||||||
1 | ||||||||||||||||
Переменная в register, операция >>, во что компилится?30.04.2009, 10:49. Показов 1678. Ответов 11
Метки нет (Все метки)
Если объявлена переменная
дак вот, если написать просто
или какую-то более сложную последовательность, с присваиванием и т.д. ?? (Просто, i++ будет инкремент, а i>>1 - ничего не будет, значение i останется прежним. А как надо?) Заранее благодарю.
0
|
30.04.2009, 10:49 | |
Ответы с готовыми решениями:
11
Игра морской бой.Можете объяснить операцию case что она делает ?И что означает переменная m3,m2,m1, и переменная z? Behavior не компилится, не хватает конструктора. Объявляю, не компилится. Не пойму Замена register.php на /register Не компилится.Что не так? |
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
||||||
30.04.2009, 10:58 | 2 | |||||
всмысле?
Добавлено через 3 минуты 1 секунду вообще-то, во что она будет компилится - зависит от компилятора, насколько я знаю... возможно, все компиляторы и компилят в одно и тоже, но это не факт... компилятор производит оптимизацию и минимазацию.. поэтому после компилирования, сложно угадать. Сделайте дизасм свое программы, и посмотите.
0
|
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
|
||||||
30.04.2009, 10:59 | 3 | |||||
Сначала значение запишется в регистр, потом операция сдвига, потом из регистра обратно в ячейку памяти
Тоже самое если написать
1
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
30.04.2009, 11:17 [ТС] | 4 |
Вопрос, это будет 1-на инструкция или несколько (эффективность кода, только, меня интересует). Компилятор g++, без опций. (Переменная i ВСЕГДА в регистре, поскольку объявлена как register, и существует внутри блока.) Кто нибудь знает конкретнее ?
0
|
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
|
|
30.04.2009, 11:32 | 5 |
С чего бы вдруг?
Это если будет свободный регистр в данном блоке,а если не будет то переменная разместится в ячейке памяти. И это логично. А вдруг я объявлю подобных перемнных больше ,чем регистров общего назначения
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
30.04.2009, 13:27 [ТС] | 6 |
А если их в каждом блоке не > 4 ?
(Ну, AX всяко будет использоваться другими командами, BX м.б. тоже, ну, не знаю. Я почему то решил, не > 4-х, и ладно - может ли это гарантировать, что не выкинут? Или может это всё ерунда (и стараться оптимизировать - вообще не нужно, т.к. всё равно)?)
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
30.04.2009, 13:35 | 7 |
Тебе, как разработчику на Си/Си++, это без разницы. Ключевое слово register - это всего лишь нижайшая просьба к компилятору: "Ваше Святейшество, будьте любезны, попытайтесь разместить вот эту переменную в регистре, коли получится, ну а коли нет - мы, холопы Ваши, претензиев не имеем". И компилятор имеет полное право эту просьбу в любой момент проигнорировать.
Поверь, компиляторы пишут ну ооооочень неглупые люди, и оптимизировать сгенерированный компилятором код по времени исполнения (типа -O3) они умеют. Не факт, что тебе (или вообще среднему прикладному программисту) удастся это лучше, - тем более, что код, сгенерированный современными компиляторами, очень и очень неплох. Скорее всего, получится намного хуже.
1
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
30.04.2009, 14:33 [ТС] | 8 |
Понятно. (а зачем тогда вообще это слово ?)
Вот, счётчики циклов после компиляции "-O3" - будут все в регистрах (если вложенность циклов не >3), или сложно сказать? Вообще, где можно посмотреть примеры кода C++, который с буковкой O3 выдаёт максимально быстрый (или считающийся таковым) код ? Пусть это будут хотя бы сортировки или т.п. (под любой 32-битный стандарт, кстати, сравнить под g++ и VC++ было бы интересно). (Ведь учебников ПО ОПТИМИЗАЦИИ - НЕТ в принципе, а то что есть, там - тривиальные истины, то что все и так понимают). Сайт Пита И..си - вот пожалуй и всё, что удалось найти мне (там, ессно, на английском). Оптимизация для MFC. Зашибись...
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
30.04.2009, 14:38 | 9 |
Слово это осталось как рудимент ранних (ДОС-)компиляторов, когда оптимизировать приходилось вручную.
Посмотреть примеры кода? Да лехко. Напиши любой пример, и откомпилируй его в Release с оптимизацией. И VC++, и GCC умеют выдавать ассемблерные листинги кода (посмотри в документации) с привязкой листинга к исходного строкам кода. Другие компиляторы, видимо, тоже; просто именно с этими работаю постоянно и точно знаю. Наслаждайся!
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
30.04.2009, 17:51 [ТС] | 10 |
Как в Линуксе посмотреть асм-код (и данные) elf-файла? (Есть ли такая прога ?).
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
30.04.2009, 18:25 | 11 |
IDA, например.
А если это твой код - то все проще, используй ключик -S компилятора. Подробности в мануале по GCC или по ключику --help.
1
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
30.04.2009, 20:29 [ТС] | 12 |
Кто говорит - не знает,
Кто знает - не говорит (а делает). Лао Цзы.
0
|
30.04.2009, 20:29 | |
30.04.2009, 20:29 | |
Помогаю со студенческими работами здесь
12
Модульная переменная или блочная статическая переменная: что лучше Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз Не компилится код программы! ругается на объявление переменной - не могу разобраться что все таки нужно - чтоб работать стала Syntax error в Register: <%@ Register TagPrefix="sb" Namespace="SB.WebControls" Assembly="SB.WebControls"%> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |