![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lycifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Оптимизация компилятора - это конечно хорошо, но дело в том что иногда он оптимизирует не то
Пример: const int a = 10; _asm { mov eax, dword ptr[a] mov eax, 11 mov dword ptr[a], eax } function(a); так вот передается 10, а ведь должно 11... Я понимаю что оно не есть хороший подход, но это уже другой вопрос... Идея лиш одна что asm передавать, может можно что-то друголе.. Так вопрос, смысл был веделить память и не использовать(комилятор так делает) |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
volatile ?
|
|||
|
||||
| 586 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 10 Всего: 146 |
Слово volatile предупреждает компилятор, что переменная может быть изменена со стороны, без участия компилятора.
Не понял вопроса. В ассемблерной вставке обращение идёт к памяти. Без неё никак. |
||||
|
|||||
| Lycifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
Вопрос был в том что бы он не дефайнел константу, то и есть при передале в функцию передаётся значения , при этом значение не берётся из памяти
|
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Наверно просто компилятор с++ не умеет оптимизировать с ассемблерными вставками. Для него константа не меняется поэтому он и пихает ее напрямую. С volatile он будет считывать эту константу каждый раз из памяти, а не использовать непосредственное значение. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Стоп, стоп. Я что-то не понял, а какой смысл объявлять константным то, что потом меняется? Убери const и дело с концом. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
||||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Можно и так записать:
Это даст понять компилятору, что a - константа, но ее не надо оптимизировать, ведь volatile используется не только потому, что переменная может быть изменена извне, а const нужен не более чем для предотвращения ошибки программиста в коде и не предполагает защиту ячейки памяти от изменения во время выполнения программы. Но это только если автор потом уберет asm вставку, а то смысла в константе нет, если она не константа. Это сообщение отредактировал(а) SABROG - 23.7.2008, 17:54 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 8 Всего: 158 |
||||
|
||||
| DRUID3 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 463 Регистрация: 20.6.2005 Где: Kyyiv Репутация: 1 Всего: 9 |
Да никуда он ее не положит с volatile...
да все он умеет. Для GCC нужно писать _asm_ _ volatile_ ...
Да, верно. Я так понял это он из вне так хочет принять размер массива... Просто нужно сделать совсем не так тогда... -------------------- Every time if you use Linux, you are joined to the communism... практика - критерий истины ... отделенной от нас пропастью субъективного восприятия... |
||||||
|
|||||||
| Lycifer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 144 Регистрация: 4.11.2007 Репутация: нет Всего: нет |
На счет volatile - const полечит, ну вот что делать в других случаях остаётся вопрос(ТО и есть я думаю бывают и другие случаи когда компилятор оптимизирует ну а делать это не надо, const это просто пример)
|
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Большинство компилеров имеют для этого (отключение и настройка оптимизации) спецпрагмы и спецопции - смотри доки по своему компилеру.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |