Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как указать комилятору что бы он не оптимизировал, Оптимизация компилятора 
:(
    Опции темы
Lycifer
Дата 21.7.2008, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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 передавать, может можно что-то друголе..
 Так вопрос, смысл был веделить память и не использовать(комилятор так делает) smile 

PM MAIL ICQ   Вверх
SABROG
Дата 21.7.2008, 13:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



volatile ?


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
586
Дата 21.7.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Код
volatile const int a = 10;

Слово volatile предупреждает компилятор, что переменная может быть изменена со стороны, без участия компилятора.
Цитата(Lycifer @  21.7.2008,  14:03 Найти цитируемый пост)
Так вопрос, смысл был веделить память и не использовать(комилятор так делает)

Не понял вопроса. В ассемблерной вставке обращение идёт к памяти. Без неё никак.
PM   Вверх
Lycifer
Дата 21.7.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Вопрос был в том что бы он не дефайнел константу, то и есть при передале в функцию передаётся значения , при этом значение не берётся из памяти
PM MAIL ICQ   Вверх
SABROG
Дата 21.7.2008, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



Цитата(Lycifer @ 21.7.2008,  13:50)
Вопрос был в том что бы он не дефайнел константу, то и есть при передале в функцию передаётся значения , при этом значение не берётся из памяти

Наверно просто компилятор с++ не умеет оптимизировать с ассемблерными вставками. Для него константа не меняется поэтому он и пихает ее напрямую. С volatile он будет считывать эту константу каждый раз из памяти, а не использовать непосредственное значение.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
JackYF
Дата 21.7.2008, 18:02 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(SABROG @  21.7.2008,  12:55 Найти цитируемый пост)
С volatile он будет считывать эту константу

Стоп, стоп. Я что-то не понял, а какой смысл объявлять константным то, что потом меняется? Убери const и дело с концом.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 22.7.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(JackYF @  21.7.2008,  18:02 Найти цитируемый пост)
Стоп, стоп. Я что-то не понял, а какой смысл объявлять константным то, что потом меняется? Убери const и дело с концом. 

+1


--------------------
PM MAIL ICQ Skype   Вверх
SABROG
Дата 23.7.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 4
Всего: 91



Можно и так записать:

Код

const volatile int a = 10;


Это даст понять компилятору, что a - константа, но ее не надо оптимизировать, ведь volatile используется не только потому, что переменная может быть изменена извне, а const нужен не более чем для предотвращения ошибки программиста в коде и не предполагает защиту ячейки памяти от изменения во время выполнения программы.

Но это только если автор потом уберет asm вставку, а то смысла в константе нет, если она не константа.

Это сообщение отредактировал(а) SABROG - 23.7.2008, 17:54


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
dumb
Дата 23.7.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



Цитата(SABROG @  23.7.2008,  18:48 Найти цитируемый пост)
а const нужен не более чем для предотвращения ошибки программиста в коде и не предполагает защиту ячейки памяти от изменения во время выполнения программы.

т.е. ты исключаешь вероятность того, что компилер/линкер может положить константу в .rdata?
PM MAIL   Вверх
DRUID3
Дата 23.7.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 20.6.2005
Где: Kyyiv

Репутация: 1
Всего: 9



Цитата(dumb @  23.7.2008,  17:35 Найти цитируемый пост)
т.е. ты исключаешь вероятность того, что компилер/линкер может положить константу в .rdata? 

Да никуда он ее не положит с  volatile...

Цитата(SABROG @  21.7.2008,  12:55 Найти цитируемый пост)
Наверно просто компилятор с++ не умеет оптимизировать с ассемблерными вставками.

да все он умеет. Для GCC нужно писать _asm_ _ volatile_ ...

Цитата(JackYF @  21.7.2008,  17:02 Найти цитируемый пост)
Стоп, стоп. Я что-то не понял, а какой смысл объявлять константным то, что потом меняется? Убери const и дело с концом. 

Да, верно. Я так понял это он из вне так хочет принять размер массива... Просто нужно сделать совсем не так тогда...


--------------------
Every time if you use Linux, you are joined to the communism...
практика - критерий истины ... отделенной от нас пропастью субъективного восприятия...
PM MAIL WWW Skype   Вверх
Lycifer
Дата 24.7.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



На счет volatile - const полечит, ну вот что делать в других случаях остаётся вопрос(ТО и есть я думаю бывают и другие случаи когда компилятор оптимизирует ну а делать это не надо, const это просто пример)
PM MAIL ICQ   Вверх
Любитель
Дата 24.7.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Большинство компилеров имеют для этого (отключение и настройка оптимизации) спецпрагмы и спецопции - смотри доки по своему компилеру.


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.