Grigoriy |
Отправлено: 19.04.2006, 04:12 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
В общем составлял программу в C++ Builder 6.0.
Основная часть текста — на встроенном ассемблере.
И вот такой фокус.
Если режим оптимизации компиляции = none
то программа выполняется нормально.
Выставляю speed — начинает выдавать ошибку времени выполнения, что запись идет в недоступную ячейку памяти.
Это что — компилер свихнулся ?
Его неправильно делали ?
|
|
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
функция сама чистит за собой стек. Но в этом случае ей нельзя передавать переменное число параметров.
|
|