|
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
|
|
Как увидеть часть своего С++ кода на ассемблере?10.10.2016, 12:14. Показов 5059. Ответов 39
Метки нет (Все метки)
Есть код на С++, но...
Но программа "огромна" и работает "медленно". Хочется улучшить... Например, 1. вместо байтов использовать полубайты избегая операций разделения/сборки 2. вместо некоторых "целых" использовать биты 3. ... Но как увидеть "интересные" куски своего же С++ код на asm, чтобы понять как минимум: - 1. как там называются мои переменные и адреса их хранения (для последующих их обработок группами, вместо кучи индивидуальных) - 2. чем различаются некоторые мои подпрограммы. Стоит ли их сливать/разделять - 3. ...
0
|
|
| 10.10.2016, 12:14 | |
|
Ответы с готовыми решениями:
39
Как узнать имя компьютера (своего, чужого) из кода на VB? |
|
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
|
|
| 10.10.2016, 15:30 [ТС] | |
|
Печально...
А (битовые массивы) в ассемблере? (Но конечно, чтобы компилятор не загнулся от них)? И всётаки главный вопрос: могу ли я в своём старинном С++ Builder 6: - увидеть ассемблерный эквивалент "интересного" для меня участка кода? - при случае, исправить его
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 10.10.2016, 15:32 | |
|
0
|
|
|
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
|
|
| 10.10.2016, 15:33 | |
|
ZaRus1, бери vs community, если на виндах. Кидай свой код сюда, и если больно много то услышишь рекомендации о том, как не надо делать. С битами бестолку возиться, если у тебя не упакованные данные. Минимальная адресация к байту (значит переход к битам просто добавит возни с масками, если не подвернется красивая идея). Компилятор оптимизирован на int, так что все летит в регистры e[abcd]x. Если много структур/классов, то вспомни о выравнивание (чтоб дыр не было. так типо меньше напряга с памятью). Но скорее всего стрыктуры и классы передаются по значению, а не по ссылке. Если фортран, то наверно с алгоритмами проблем нет, ну разве что есть "волшебные ускорители", которые прям до ассемблера оптимизированы в с++. Скоко говоришь тебе лет?!
0
|
|
|
|
||
| 10.10.2016, 15:36 | ||
|
Не нужно исправлять компилятор, он делает так как лучше, согласно настройкам, по умолчанию вроде оптимизация на скорость.
Может не заметил, но вы вроде так и не ответили на это: Иногда из-за маленького фрагмента/функции кажется что всё слишком долго, но не нужно лезть в ассемблер и что-то править ему - надо в коде C++ найти что именно "тормозит". Можно добавить измрение скорость выполнения отдельных фрагментов, выводить в лог сколько что делалось. Или натравить на проект профайлер.
0
|
||
|
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
|
|||
| 10.10.2016, 16:05 [ТС] | |||
|
ValeryS
Как открыть окно дизасемблерного листинга? (Извините за мою безграмотность.) Думаю, что после этого многие мои вопросы "умрут" сами собой. BOGG ART
Извините, что такое: - лог (хотя и без него я вижу, что долго, а что быстро) - профайлер (хотя думаю, что он мне пока не нужен)? К сожалению, я хоть и далеко не начинающий, но ... отстало-вымирающий (ещё раз... Я - пенсионер, что вероятно хуже = бесперспективнее...)
0
|
|||
|
|
|
| 10.10.2016, 16:19 | |
|
Лог - в большинстве случаев окошко с текстом или текстовый файл, содержащий список сообщений/событий. Позволяет не гадать/подозревать, а точно знать что когда как сколько кто куда ...
Профайлер - инструмент для поиска какой участок кода тормозит весь процесс: Википедия. Если памяти хватает с запасом - то не надо принудительно уменьшать int до байта, ничего не даст. А что вы хоть делаете-то?
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||
| 10.10.2016, 16:46 | |||
Вот был бы VS я бы подсказал а с булдером никогда не работал![]() попробуй поспрошать в соответствующей ветке https://www.cyberforum.ru/cpp-builder/ типа "отладчик в Builder 6"
0
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 10.10.2016, 16:54 | |
|
Avazart, так твой пример генерит листинг всего файла. Я правильно понял?
а ТСу достаточно одного маленького участка засим вопрос, можно ли включить в отладчике дизасемблер? типа такого одно окно код Си второе дизасемблируемый листинг
0
|
|
|
|
|||
| 10.10.2016, 16:58 | |||
|
0
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||
| 10.10.2016, 17:02 | ||
![]() статические листинги нафиг не кому не нужны,нужно узреть процесс в динамике, а это и есть отладка
0
|
||
|
|
||||||
| 10.10.2016, 17:04 | ||||||
|
Ну мне не нужен асм код.
Если отлаживаю то мне достаточно посмотреть только на вызовы ф-ций. С++ Код
1
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 10.10.2016, 17:11 | ||
Сообщение было отмечено ZaRus1 как решение
РешениеCtrl-Alt-C в режиме отладки.Точку останова ставят двойным кликом на полоске слева от ввода кода. См. скриншот. Только мало что это даст. Лучше прислушаться к советам выше. Низкоуровневая оптимизация на современных компьютерах дело нетривиальное и не всегда очевидное. Компилятор обычно это делает много лучше среднестатистического программиста, т.к. компилятор "знает" особенности современной архитектуры процессоров, а вот средний программист - нет. Программист же должен сосредоточиться на алгоритме, это будет в десятки раз выгоднее (и по памяти и по скорости, в целом), чем колупать биты.
3
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||||||
| 10.10.2016, 17:15 | |||||||
|
Но было у меня один раз давным-давно, уже не помню деталей,программа рушилась после одной функции, но не всегда, оказывается я соглашения о вызовах нарушил, то ли Сишный вызов вместо паскалевского, то ли наоборот ну и ассемблерный листинг сразу дал ответ, когда я увидел
0
|
|||||||
|
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
|
|
| 10.10.2016, 17:21 [ТС] | |
|
DrOffset Очень, очень признателен Вам.
Ctrl-Alt-C - это то, что мне было нужно. Остались пара "тривиальных" вопросов, которые кажется, можно задать компу. Можно ли: 1. Вырезать кусок и заменить им оператор 2. Исправить кусок и предложить его компилятору. Ещё раз, огромное Вам спасибо.
0
|
|
|
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
|
||||||
| 10.10.2016, 17:25 | ||||||
|
ZaRus1,
0
|
||||||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 10.10.2016, 17:34 | |||
|
Можно сделать ассемблерную вставку в коде на С++. В справке Builder есть пример, если поискать там ключевое слово _asm. Однако, я еще раз предупрежу: это не решит проблему. Чтобы этим пользоваться, нужно четко знать и как работает компилятор (как он генерирует код) и как работает процессор. Так что, если что, я не несу никакой ответственности за какие-либо неудачи в этом деле.
0
|
|||
|
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
|
|
| 10.10.2016, 17:35 [ТС] | |
|
Уважаемые администраторы, если Вас не затруднит, то (для возможных последующих читателей) скорректируйте мой 1й пост (я этого не могу) добавив строчку:
Да, можно! Для этого на точке останова нужно набрать Ctrl-Alt-C (и увидите столько, сколько захотите). Большое Вам всем спасибо. И всего Вам наилучшего.
0
|
|
| 10.10.2016, 17:35 | |
|
Не понимаю как работает часть кода Объяснить как работает часть кода Как вырезать часть из кода страницы? Как вынести часть кода в процедуру? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|