С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54

Как увидеть часть своего С++ кода на ассемблере?

10.10.2016, 12:14. Показов 4630. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код на С++, но...
Но программа "огромна" и работает "медленно".

Хочется улучшить... Например,
1. вместо байтов использовать полубайты избегая операций разделения/сборки
2. вместо некоторых "целых" использовать биты
3. ...
Но как увидеть "интересные" куски своего же С++ код на asm, чтобы понять как минимум:
- 1. как там называются мои переменные и адреса их хранения (для последующих их обработок группами, вместо кучи индивидуальных)
- 2. чем различаются некоторые мои подпрограммы. Стоит ли их сливать/разделять
- 3. ...
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2016, 12:14
Ответы с готовыми решениями:

Как можно увидеть написанный код VS в виде кода ассемблера?
Добрый день! Как можно увидеть написанный код VS в виде ассемблера?

Как вытащить часть кода из кода страницы?
Знаю, что можно через json как-то. Вот например есть код страницы, на нем есть несколько одинаковых блоков. Нужно вытащить определенный...

Как узнать имя компьютера (своего, чужого) из кода на VB?
Как узнать имя компьтера(своего,чужого) из кода на VB ??? Спасиба

39
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.10.2016, 12:21
В ассемблере никак не "называются".
Полукто? Да ещё и биты... Зачем? Это как правило наоборот негативно сказывается на скорости.
Ищите узкие места программы, в коде C++.
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.10.2016, 12:25
Какой компилятор?
Как на VC++, так и на GCC можно получить ассемблерный листинг, сгенерированный из исходного кода. (Правда, для "огромной" программы и листинг будет немаленький.)

Ну и да, как сказал коллега BOGG ART, копаться на уровне ассемблера в 99% случаев малоэффективно. Гораздо больше пользы принесет оптимизация алгоритмов на высоком уровне, на C++.
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 12:28  [ТС]
Байт - 8 бит
Полубайт - 4.

Зачем и правила это другой вопрос.
Главный вопрос - как и можно или нет.

Есть ряд задач, где важны размеры обрабатываемой информации и скорость.

Да. Весь листинг - неподъёмен. Можно ли увидеть "интересную" часть кода?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.10.2016, 12:29
Цитата Сообщение от ZaRus1 Посмотреть сообщение
1. вместо байтов использовать полубайты избегая операций разделения/сборки
2. вместо некоторых "целых" использовать биты
что тут у нас? рецепт как жечь производительность напалмом?
откройте для себя "дата ориентированное программирование".
или как сделать "кэш-френдли".

Цитата Сообщение от ZaRus1 Посмотреть сообщение
Но как увидеть "интересные" куски своего же С++ код на asm, чтобы понять как минимум:
- 1. как там называются мои переменные и адреса их хранения (для последующих их обработок группами, вместо кучи индивидуальных)
- 2. чем различаются некоторые мои подпрограммы. Стоит ли их сливать/разделять

профайлер? не, не слышал.
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
10.10.2016, 12:50
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Есть ряд задач, где важны размеры обрабатываемой информации и скорость.
Или размер или скорость.
Ещё раз - упаковка как правило негативно сказывается на скорости.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.10.2016, 12:52
Оставлю здесь: http://gcc.godbolt.org/
4
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 12:56
Кроме того как бы если сам писал сам должен знать узкие места в коде, собственно эти места и оптимизировать.
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 13:09  [ТС]
Croessmah,
Оставлю здесь: http://gcc.godbolt.org/
Спасибо. Это близко к нужному. Но как Вы это сделали? И можно ли это делать к части кода?

Добавлено через 8 минут
Кроме того как бы если сам писал сам должен знать узкие места в коде, собственно эти места и оптимизировать.
Да сам. Да знаю.
Но если мои объекты "описываются" 16 "вариантами" (4 бита), то мне желательно пользоваться не байтами, а "полубайтами".

Но дело не в этом.
Дело в том, чтобы увидеть более подробный (чем С++) код. И не всей программы, а "интересного" места (3-5 строк).
Вероятно, что это возможно, т.к. при ошибках иной раз вываливается "не интересный" кусок кода из "непонятного" места.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.10.2016, 13:13
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Но как Вы это сделали?
Что я сделал? Слева вводим код на C++, справа получаем выхлоп на asm.
Ключи компилятора, платформы и синтаксис можно выбирать.
Также есть режим подсветки разных строчек разными цветами.
И еще что-то там тоже есть.
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 13:23  [ТС]
Если можно, поясните. У меня есть С++ и тексты моих модулей.cpp.
Но ассемблера у меня нет.
Я могу выделить "интересную" мне часть кода, но как подать команду на её "расшифровку"?
Как выйти на список и описание "ключей компилятора" позволяющих расшифровать "интересную" мне часть С++ кода?
0
10.10.2016, 13:36

Не по теме:

Цитата Сообщение от ZaRus1 Посмотреть сообщение
Но если мои объекты "описываются" 16 "вариантами" (4 бита), то мне желательно пользоваться не байтами, а "полубайтами".
При желании можно упаковывать по 4 бита. Но обрабатываться они будут медленнее.

0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 13:54  [ТС]
Цитата Сообщение от BOGG ART Посмотреть сообщение

Не по теме:


При желании можно упаковывать по 4 бита. Но обрабатываться они будут медленнее.

Вы правы.
Упаковка и распаковка (особенно многократные) - ужасны. Поэтому вместо массивов из байт (или int-ов) желательны "полубайтовые" = "4х битные" (или иногда "3х битные") массивы.
Но это действительно не по теме. Как "паковать" информацию решается в диалоге программиста и компьютера. Именно они вдвоём находят "лучшую комбинацию".

А вопрос пока - как заменить часть С++ кода asm кодом?

Например, имеем:
...
a=b+c;
d=a+b;
c=0;
...
Хотим увидеть asm-код средней строки ( d=a+b; ) конкретно в этом месте программы.
Если это возможно, то как это сделать?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
10.10.2016, 13:57
Цитата Сообщение от ZaRus1 Посмотреть сообщение
желательны "полубайтовые" = "4х битные" (или иногда "3х битные") массивы.
Так Вы говорите об оптимизации скорости выполнения программы, или всё-таки об оптимизации по памяти?
Потому что от того, что будет 4 бита вместо 8 скорость не поднимется. Я думаю, что компьютер и сам не будет трогать те биты, которые ему не нужны.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.10.2016, 14:01
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Поэтому вместо массивов из байт (или int-ов) желательны "полубайтовые" = "4х битные" (или иногда "3х битные") массивы.
выравнивание? не, не слышал.

Цитата Сообщение от ZaRus1 Посмотреть сообщение
Но это действительно не по теме.
http://stackoverflow.com/quest... -c-program
0
10.10.2016, 14:02

Не по теме:

Так если вы сами говорите "ужасны", то почему они вам "желательны"?

0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.10.2016, 14:14
Есть опции компилятора для генерации кода asm, в IDE есть менюшки для этого.
Миниатюры
Как увидеть часть своего С++ кода на ассемблере?  
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
10.10.2016, 14:18
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Поэтому вместо массивов из байт (или int-ов) желательны "полубайтовые" = "4х битные"
что быстрее
C++
1
2
3
unsigned char a[2];
a[0]=1;
a[1]=2;
или
C++
1
unsigned char b=2<<4 | 1;
и это только упаковка
процессор заточен не определенные типы данных,например 32х битный работает быстрее на 32хразрядных данных
Цитата Сообщение от ZaRus1 Посмотреть сообщение
А вопрос пока - как заменить часть С++ кода asm кодом?
вручную? есть уверенность, что это будет быстрее?
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Хотим увидеть asm-код средней строки ( d=a+b; )
поелику среда так и не указана, то общие рассуждения
ставим точку останова
запускаем в режиме отладки
когда программа остановится в отладчике на нужной строчке, открываем окно дизасемблерного листинга и смотрим

Добавлено через 2 минуты
Цитата Сообщение от ZaRus1 Посмотреть сообщение
a=b+c;
d=a+b;
вполне можем увидеть аналог вот этого
C++
1
d=b*2+c;
или
C++
1
d=b<<1+c;
0
1 / 1 / 0
Регистрация: 18.08.2014
Сообщений: 54
10.10.2016, 15:20  [ТС]
Цитата Сообщение от BOGG ART Посмотреть сообщение

Не по теме:

Так если вы сами говорите "ужасны", то почему они вам "желательны"?

Гм...
Вы меня заинтриговали. Возможно, я что-то неправильно понимаю в "сегодняшнем" ...?
В своё время (мне 63) я программировал на FORTRAN-е и там были объединения (общие области). Так что(?) разве здесь невозможно что-то типа:
struct a {unsigned bi 3;}
union c {int d[3]; bi[16];}
где 3*16 бит совпадают в памяти с 16*3 бита? И возможно обращение к нужным 3м битам?

Но (не помню где читал) более мелкие, чем байт данные существуют? Или уже нет?
Жаль, если так...
Это способно повлиять на кое-какие мои планы...
Это не по теме, но спасибо Вам за это уточнение...

Добавлено через 3 минуты
Avazart,
У меня С++ Builder 6
Где такое меню?

Добавлено через 17 минут
ValeryS, мне сложно ответить на Ваши вопросы.
Но если в большом массиве битов мне надо несколько раз разыскать нужные комбинации, потом как-то изменить их и запомнить, то распаковки и упаковки обойдутся мне "в копеечку".
Ещё раз... Могу ли я получить массив
- 3х (или 4х) битных элементов, чтобы не использовать почти "пустые" байты?
- или 9-ти битные элементы, чтобы не использовать почти "пустые" int-ы?
Надо ли мне "плевать" на расход памяти? На "дыры/пустоты" в моих данных?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
10.10.2016, 15:29
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Но (не помню где читал) более мелкие, чем байт данные существуют?
В Си нет
есть битовые поля, но в данном случае, по моему,непригодны

Добавлено через 4 минуты
Цитата Сообщение от ZaRus1 Посмотреть сообщение
Надо ли мне "плевать" на расход памяти?
да
хотя вопрос в абстрактном ракурсе решения не имеет
извечная проблема скорость/память
реши что тебе важнее
Цитата Сообщение от ZaRus1 Посмотреть сообщение
или 9-ти битные элементы, чтобы не использовать почти "пустые" int-ы?
могу порекомендовать short int
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2016, 15:29
Помогаю со студенческими работами здесь

Как отключить часть кода
Добрый день! Подскажите пожалуйста как закрыть часть программы: xnew = .x + .vx * Dt + 0.5 * .ax * Dt * Dt ynew = .y + .vy * Dt + 0.5 *...

Не понимаю как работает часть кода
Привет! Есть код using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace...

Объяснить как работает часть кода
Нужна помощь, объяснить как работает часть кода, а именно добавление элементов в двусвязный кольцевой список void List::Add(int x) { ...

Как вырезать часть из кода страницы?
Вот сам код: &lt;div class=&quot;scont&quot;&gt; &lt;div id=&quot;news-id-15014&quot; style=&quot;display:inline;&quot;&gt;&lt;div align=&quot;center&quot;&gt;&lt;!--TBegin--&gt;&lt;a...

Как вынести часть кода в процедуру?
Вот код программы, как выделенное вынести в процедуру? program privet; label 1; var a,b,i:integer; begin i:=0; a:=500; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru