Я там вообще никогда не был и меня не пускает. Нормально Господа, а где в CubeIDE можно дизассемблер глянуть? Хочу понять какая разница между 2мя записями: LCD_SendChar(char_arr[i]); и LCD_SendChar(*char_arr); char_arr++;
Я там вообще никогда не был и меня не пускает. Нормально Господа, а где в CubeIDE можно дизассемблер глянуть? Хочу понять какая разница между 2мя записями: LCD_SendChar(char_arr[i]); и LCD_SendChar(*char_arr); char_arr++;
Комментарии: 19
Sanat
в режиме дебагера
Ogurezzz
Спасибо... До туда почему-то не добрался
Sanat
Не за что
Ogurezzz
Оказалось с точки зрения количества инструкций все одинаково. Получается, что в быстродействии разницы никакой? Инструкция может выполняться разное количество тактов же?
Indr1x
Скорее компилятор эти 2 конструкции превращает в одно и тоже Это же ссылки на ячейку памяти фактически
Ogurezzz
Не совсем, он все делает ожидаемо. Т.е. при LCD_SendChar(char_arr[i]); Он сначала загружает адрес массива, делает смещение на i, берет оттуда значение и вызывает функцию. При втором варианте - сразу берет значение, вызывает функцию, потом инкрементирует.
Tiny
компилятор может проворачивать штуки намного сложнее (например расчет частей кода в компайл тайме и подстановка готового результата в код) я например использовал сортировку массива в компайл тайме при помощи шаблонов
Ogurezzz
Это тоже понятно, оптимизация и различные ее уровни тоже не зря существуют. Да и volatile тоже придуманы не зря.
Dmitriy
Инструкция всегда выполняется рассчитанное число тактов и меняться не модет
Indr1x
Не совсем так, еще от входных данных может зависеть, типа умножение целочисленное или с спавающей , и т.д.
Dmitriy
Ну да, просто может не удачно описал. Что касается математики с точкой и тп, ещё тест условных переходов есть, но там 2 варианта. Основная масса инструкций четко регламентирована...
Ogurezzz
Т.е. любая инструкция выполняется всегда одно и то же время? Мне казалось, есть инструкции, которые занимают больше тактов, есть которые меньше...
Indr1x
Не любая. А каждая выполняется за свое определенное число тактов, с небольшими исключениями выше
Ogurezzz
Вот. Так у меня в голове и было. Спасибо. Т.е. одинаковое количество!=одинаковому времени выполнения при определенных условиях.
Dmitriy
Есть, знакомься с системой команд. Но количество тактов регламентируется для каждой
Tiny
компилятор может творить чудеса как правило когда пишешь на высокоуровнем языке можно не обращать внимание на такие моменты
Ogurezzz
Да понятно. Просто стало интересно :)
Dmitriy
Есть машинный такт, машинный цикл. Инструкции могут занимать от одного до нескольких машинных циклов
Tiny
ну илирасчет факториала в компайл тайме)