C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Фокус после компиляции в режиме speed, Когда режим компиляции speed — ошибка.
Grigoriy
Отправлено: 19.04.2006, 04:12


Мастер участка

Группа: Участник
Сообщений: 381



В общем составлял программу в C++ Builder 6.0.
Основная часть текста — на встроенном ассемблере. cool.gif
И вот такой фокус.
Если режим оптимизации компиляции = none
то программа выполняется нормально.
Выставляю speed — начинает выдавать ошибку времени выполнения, что запись идет в недоступную ячейку памяти. biggrin.gif biggrin.gif

Это что — компилер свихнулся ?
Его неправильно делали ?
Boyko
Отправлено: 19.04.2006, 11:36


Станционный диспетчер

Группа: Участник
Сообщений: 88



QUOTE (Grigoriy @ 19/04/2006, 03:12)
Это что — компилер свихнулся ?
Его неправильно делали ?

Трудно правильно сделать на 100%.

Иногда так как у тебя.

Кстаты, я всегда пишу NONE.
Grigoriy
Отправлено: 19.04.2006, 19:57


Мастер участка

Группа: Участник
Сообщений: 381



Я советую всем, кто пишет подпрограммы с блоками на встроенном ассемблере применять ключевое слово

__stdcall

Я так сделал, и все нормально теперь в любом режиме компиляции.

Отредактировано Grigoriy — 19/04/2006, 19:58
_NIK_
Отправлено: 20.04.2006, 23:13


Дежурный стрелочник

Группа: Участник
Сообщений: 55



В C++ есть три вида вызова процедур — __stdcall,__fastcall,...и еще какой-то забыл.
Что соответствует разным вызовам функций — нормальный вызов,асм`овский вызов, паскалевский вызов(или как-то по другому). Различия в скорости выполнения, в заполнении стека и еще что-то.

Отредактировано _NIK_ — 20/04/2006, 23:14
Grigoriy
Отправлено: 21.04.2006, 00:42


Мастер участка

Группа: Участник
Сообщений: 381



__fastcall
в процедуру часть параметров передается через регистры процессора, тем самым передача параметров производится быстрее
__stdcall
функция сама чистит за собой стек. Но в этом случае ей нельзя передавать переменное число параметров.

Вернуться в Вопросы программирования в C++Builder