@Urichat

Почему программы на ассемблере работают быстрее?

Друзья, постоянно слышу, что программы на ассемблере работают быстрее программ на C, C++, Python, etc. С последним все понятно, интерпритатор сначала переводит код, в байт код, потом его компилирует, только затем выполняет. Но почему ассемблер, быстрее например программ на С. Понятно дело, что он может быть и медленнее, если руки кривые. Но возьмем сферического в вакууме программиста который точно знает что делает, пишет идеальные, быстрые программы. И вот ему нужно ускорить программу. Он решает написать некуд функцию вставкой на асме в программе на си. За счет чего увеличится скорость программы? Для примера будем считать, что она точно увеличится. Когда мы скомпилируем программу исполняемый файл будет уже представлять из себя машинный код, разве нет? Короче вопрос из заголовка, почему это так?
  • Вопрос задан
  • 3599 просмотров
Решения вопроса 1
Decadal
@Decadal
Любое преобразование языка высокого уровня в машинный код приводит к издержкам. Ассемблер работает быстрее, потому что программист не пишет ничего лишнего, а чтобы обеспечить универсальность применения языковых конструкций, все машинные коды, созданные трансляторами, избыточны.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
нужно ускорить программу. Он решает написать некуд функцию вставкой на асме в программе на си

Не, нифига не так программы оптимизируют. Обычно запускают профилировщик и находят функцию которая занимает больше всего времени, анализируют её и меняют алгоритм с экспоненциальной сложностью на алгоритм с квадратичной или линейной, а если повезёт -- с константной сложностью. Не меняя язык.
Ответ написан
Комментировать
@pfg21
ex-турист
НЕ ВСЕГДА !!
все зависит от качества написанного кода, т.е. умений погромиста. как в принципе и в любом языке.

ассемблер прост наиболее близок к двоичному исполняемому коду, который непосредственно исполняется в процессоре.
соотвественно есть огромная куча возможностей как сделать сделать идеально подходящий к данному процессору код и соответственно самый быстрый. ты разговариваешь с процом практически на его языке.
но, вполне естественно, вариантов сделать гавно тоже больше чем в любом ином языке, что требует огромных познаний.

компилятор более высокого чем ассемблер языка выбирает для некоторого выражения на языке высокого уровня подходящий набор команд процессора и вставляет в конечный исполняемый файл. и этот подбор может быть не всегда идеальный.
плюс программист, в силу более вариативного обзора всей программы, может применить нестандартные решения, называемые в народе "хак", которые в данном месте сработают быстрее или с меньшим потреблением ресурсов.
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
В теории да, на практике - нет. Если человек идеально знает определённую платформу и ассемблер под неё и вообще бог в этом, то да, он напишет максимально эффективную по скорости и по памяти программу, правильно используя машинные инструкции этой платформы, но на практике таких людей нет или очень мало.
Ответ написан
kotomyava
@kotomyava
Системный администратор
Это просто миф.
Но у него, как и у любого другого мифа есть основа: на ассемблере не пишут сложные программы - это очень трудоёмко, а простые программы работают быстро, обычно. =)

На самом деле, теоретически, можно какие-то части кода оптимизировать вручную и и получить более хороший результат, не обязательно в скорости, кстати, чем у какого-то компилятора языка высокого уровня. Но современные компиляторы достаточно хороши, а труд программиста достаточно дорог, чтобы это имело хоть какой то смысл, уже даже в разработке встраиваемых решений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы