Хорошо написанное приложение на С++ обычно потребляет меньше памяти, работает без непредсказуемых задержек и в некоторых случаях может работать быстрей, чем Java.
Знание ассемблера обычно нужно, чтобы использовать какие-то инструкции процессора, которые твой компилятор не умеет использовать, чтобы значительно ускорить приложение.
Всегда, иначе твои программы будут выглядеть немного странно. ASM нужен для критичной оптимизации, когда каждый такт на счету или если код нужен совсем низкоуровневый.
в учебниках С++ ( которые для первый язык програ и поэтому начинают с «что такое цикл» и подобное) даже страуструпова Программирование. Принципы и практика использования C++ не показывает асморезультат.
притом что у С++ нет шансов против современных язычков в части адекватности синтаксиса,«С++ ниша - сверхпереносимогоассемлера»
Асм и что во что компилируется я изучал на курсе по железоблизкому программированию. Плюсы на курсе по «альтернативным» техникам программирования. Как они друг к другу относятся и причем тут современные языки, с++ и асм янипонял.
Пока ты не прибиваешься гвоздями к конкретному железу или оптимизируешь какую-нибудь хурму для работы на SSE/NEON/etc то, в современных реалиях, тебе знание asm не нужно.
А программирование на C++ имеет свои преимущества перед java безотносительно знания асма, точно так же как и жава имеет свои преимущества перед плюсами.
Программирование на С++ не имеет преимуществ перед программированием на Java.
fixed
Изучение и практика С++ даёт преимущества программисту, как спецу. Asm знать (точнее понимать) нужно в любом случае. Толковый кодер, если это реально оправданно будет писать и на жабе. Программист не знающий как работает проц, память и прочее - бестолковый быдлокодер. Использовать asm нужно только там (на том куске кода), где компилятор не способен решить задачу эффективно, а кодер может за разумный срок и усилиями разумных масштабов существенно оптимизировать работу кода. Такие моменты - редкость, тем более в прикладных задачах. Как правило это мультимедиа, очень ресурсоемкие задачи и сильно ограниченные по ресурсам железяки. (хотя нынче уже такие лютые монстры как разные арм и всякие atmega стоят копейки, т.е. оверкил не так и дорог чтоб заморачиваться).
Чтение и понимание бывает нужно при отладке. Например, линкуешься ты с библиотечкой, которая собрана с отличным от твоего соглашением о вызовах, о чём тебе, разумеется, забыли сказать. Не спустившись на уровень ассемблера ты не разберёшься, в чём проблема.
не требуется инлайнить , бывает достаточно понимать как различаются варианты реализации набора ) и какая накладная косвенность.
вообще примечательно, что аргумент про «компилятор лучше знает» многократно упоминал Степанов в его приснопамятных лекциях , с каждым разом примерами где незначительное синтаксическое изменение(с сокранением семантики не только цели но даже реализации) входного С++ кода меняло производительность генерируемого компилятором(от лучших производителей)кода в разы.
повторюсь - речь не про затачивание под конкретное архитектуру(и тем более ядро где взаимные стоимости операций специфичны.) - а про относительные стоимость (время и память) тех или иных действий.
C++ же весь из себя высокоуровневый, зачем туда aassembler внедрять? Ладно ещё в Plain C можно, масло кашей не испортишь, но в случае плюсов это как прыжок через одну ступеньку.
Всегда, иначе твои программы будут выглядеть немного странно. ASM нужен для критичной оптимизации, когда каждый такт на счету или если код нужен совсем низкоуровневый.
peregrine ★ (20.10.2014 13:23:30) >в 90% всех циклов нужны индексы.
в учебниках С++ ( которые для первый язык програ и поэтому начинают с «что такое цикл» и подобное) даже страуструпова Программирование. Принципы и практика использования C++ не показывает асморезультат.
Еще в учебниках запрещают goto, хотя десятая часть исполняемого процом кода, состоит из j[n]z/jmp.
«В учебниках» запрещают goto, потому что есть более высокоуровневые управляющие конструкции (см. «структурное программирование»). А в машинных языках таких конструкций нет, поэтому их приходится реализовывать вручную при помощи условных и безусловных переходов.
Ты это делаешь не для проца, а для себя и других людей которым, возможно, придется читать и отлаживать исходник. По сути, просто удобоваримый способ оформления программы.