Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый Годэто 1 атомарная инструкция "сравнение с обменом" сильно зависит от CPU и TYPE, повезёт - отинланится в одну инструкцию типа CMPXCHG или CMPXCHG8B или CMPXCHG16B а может и в рантайм библиотеке быть реализованной Новый Годона просто выглядит как функция чтоб С++ программеры не нервничали один программер сильно нервничает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2016, 23:35 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый Годэто 1 атомарная инструкция "сравнение с обменом" она просто выглядит как функция чтоб С++ программеры не нервничали У GCC она выглядит чуть иначе: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.06.2016, 23:37 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Из тех компиляторов, что я видел, гнус генерит самый укуренный код. Самое интересное, что даже на ровном месте умудряется засунуть ненужные инструкции. Причем больше это относится к неоптимизированному коду. Может потом меньше остается ? =) Пример1. Две страницы текста из одной строки Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. Пример2. Уже явным ассемблером написано, что надо, нет мы создаем локальные переменные. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. Если же код посложнее, сам черт ногу сломит. Как получить результат: >gcc -c -g Rem.c >objdump -d -M intel -S Rem.o > Rem.asm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 11:27 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
SiemarglПример2. Уже явным ассемблером написано, что надо, нет мы создаем локальные переменные. >gcc -c -g Rem.c Ну так включите оптимизацию, что ли )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 13:57 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Дело в том, что в ассемблер мне больше приходится лезть на этапе отладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 18:57 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
SiemarglДело в том, что в ассемблер мне больше приходится лезть на этапе отладки. а с какой целью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2016, 19:15 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
ИзопропилSiemarglДело в том, что в ассемблер мне больше приходится лезть на этапе отладки. а с какой целью?С самой тривиальной. Отлавливание багов в местах, где солнце не светит нет возможности использовать полноценный отладчик с исходным кодом. Или когда сейчас отлаживаю компилятор/libc. Надо смотреть взаимодействие ABI ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 00:19 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
тест на понимание rvalue и lvalue в выражении x = q; q реально получается rvalue потому что присваивание через временный регистр происходит movl -8(%rbp), %eax movl %eax, -4(%rbp) -- присваивание значения из %eax, в памяти его нет а что нет чтоли команды копирования из памяти в память? %rbp это типа базовый регистр для адресации автоматических переменных удобно кстати сделали курица довольна это команда бы примерно так выглядела если бы было копирование из памяти в память (ето я с мейнфреймовкой команды MVC синтаксис содрал ) толко тут смещение положительное а в инеловских командах отрицательное MVC 4(4,%rbp),8(%rbp) тогда тут было бы и 4(4,%rbp) и 8(%rbp) оба lvalue в термнологии С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. то есть как в С++ правильно считать x = q; -- справа это lvalue или rvalue или это зависит от ассемблера? то есть если через временный регистр -- rvalue если из памяти в память -- lvalue или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 02:44 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Siemargl, на всякий случай встряну, ногами не пинать - дебажный ассемблерный код отличается от релизного. Собственно, перед оптимизацией etc, смотреть надо в релизный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 06:46 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый Годтест на понимание rvalue и lvalue в выражении x = q; q реально получается rvalue потому что присваивание через временный регистр происходит movl -8(%rbp), %eax movl %eax, -4(%rbp) -- присваивание значения из %eax, в памяти его нет а что нет чтоли команды копирования из памяти в память? нет такой команды Новый Год%rbp это типа базовый регистр для адресации автоматических переменных удобно кстати сделали курица довольнаэто регистр для работы со стеком читай учебник по ассемблеру 8086, да хоть Абеля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 07:52 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Интересно, что скажет ТС, когда увидит fpu,mmx,axvx, etc =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 09:12 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
CEMbSiemargl, на всякий случай встряну, ногами не пинать - дебажный ассемблерный код отличается от релизного. Собственно, перед оптимизацией etc, смотреть надо в релизный. а при включении оптимизации вполне можно и не узнать исходный код. так что нечего плакать, что в дебаг режиме под все переменные память выделяется, даже если на регистрах переменная остаётся.живёт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 10:39 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
m_Slaэто регистр для работы со стеком прочитать для чего регистр я сам могу главное что локальная переменная выглядит как смещение от rbp она в стеке конечно но это мне не особо важно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 12:03 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
SiemarglИнтересно, что скажет ТС, когда увидит fpu,mmx,axvx, etc =) мне это не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 12:05 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый Годглавное что локальная переменная выглядит как смещение от rbp она в стеке конечно но это мне не особо важно можно адресовать и от SP, не удивляйся если увидишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 12:08 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый Годв выражении x = q; q реально получается rvalue потому что присваивание через временный регистр происходит В машинном коде нет r-value. Там все l-value. R-value это артефакт языков высокого уровня, обозначающий значение, чье расположение в памяти не контролируется программистом. Это не строгое определение, но для этого топика сойдет. Конкретно при этом присвоении вводится промежуточная переменная, потому что это технически необходимо для генерации кода, а не потому что это требование языка высокого уровня. Поэтому никакое это не r-value ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2016, 14:40 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый ГодSiemarglИнтересно, что скажет ТС, когда увидит fpu,mmx,axvx, etc =) мне это не надоА компилятору ваше мнение не интересно. Он вполне может нагенерить и mmx, и sse. Так что придется смотреть ВСЕ команды. Или просто забить на это :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 13:05 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
m_SlaНовый Год а что нет чтоли команды копирования из памяти в память? нет такой командыА как же movs? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 13:09 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Barlonem_Slaпропущено... нет такой командыА как же movs? :)сразу два регистра использует si и di ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 13:27 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
m_Slaсразу два регистра использует si и di это никак не мешает считать, что команда существует. проблема в том, что на некоторых процессорах интел команда работала не шибко быстро да и два регистра занимать, которые ещё и загрузить нужно - собственно поэтому и не наблюдаем её в результатах работы c/c++ компиляторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 16:53 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
если ассемблерной командой копировать из памяти в память где-то в микрокоде все равно будет промежуточная переменная так что a = b использует дополнительную переменную всегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 17:53 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
Новый Годесли ассемблерной командой копировать из памяти в память где-то в микрокоде все равно будет промежуточная переменная так что a = b использует дополнительную переменную всегда если один из операндов регистр - накойхер доп память? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 19:07 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
ИзопропилНовый Годесли ассемблерной командой копировать из памяти в память где-то в микрокоде все равно будет промежуточная переменная так что a = b использует дополнительную переменную всегда если один из операндов регистр - накойхер доп память? если один из операндов регистр -- то не нужно если 2 операнда память -- то нужно считать из памяти куда-то и записать по другому адресу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 21:50 |
|
||
|
Call stack, assembler listing
|
|||
|---|---|---|---|
|
#18+
плавно перешли к обсуждению микроархитектуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 21:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39256552&tid=2018495]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 406ms |

| 0 / 0 |
