Архитектура C ++: как она похожа на архитектуру машины - PullRequest
0 голосов
/ 29 октября 2011

Итак, все, что я когда-либо программировал, - это C ++, и я часто вижу, что люди упоминают, что причина C ++ в том, что он очень похож на машинный код. Мне интересно, что именно представляет собой машинная / C ++ архитектура, почему ее схожесть делает ее быстрее и как она сравнивается с другими архитектурами, такими как C #.

Я понимаю RAII, кучу, стек и синтаксис, но это все. У меня даже нет такого хорошего понимания того, из чего состоит компьютер, кроме процессора, оперативной памяти и жесткого диска. Я планирую вскоре начать изучать C # для разработки приложений WP7, поэтому я предполагаю, что более глубокое понимание того, что происходит под капотом, поможет мне выявить различия / сходства между языками.

Диаграммы или указатели на статьи на эту тему были бы великолепны!

Ответы [ 3 ]

4 голосов
/ 29 октября 2011

Материал, который делает C ++, C ++, не , действительно похож на любую архитектуру машины.Подмножество C похоже.Назначения переменных, вызовы функций, циклы, обход массива и сравнения, как правило, соответствуют небольшому набору быстрых основных инструкций.Присвоения примитивам или элементам массива, как правило, представляют собой единую инструкцию на современных процессорах: инструкция, которая перемещает значение из памяти в регистр или наоборот (например.) Люди, которые долгое время программировали на C, могут буквально видетьмашинный код, который сгенерирует их компилятор.Ключевым моментом является то, «что видишь, то и получаешь» - языковые инструкции переводятся непосредственно в машинный код, более или менее однозначно.

С другой стороны, языки «более высокого уровня»например, C # (или Java, Ruby, Python, Perl, Haskell, Scheme и т. д.) имеют более или менее существенную базовую систему поддержки времени выполнения.Для некоторых языков это означает, что задание может включать поиск чего-либо в таблице первым;для других это может означать, что присвоение иногда является простой копией, а иногда - сложной манипуляцией с данными, в зависимости от того, какого рода это данные.Гораздо сложнее предсказать, как ваши операторы будут переведены в машинный код.

C ++ находится в интересной области: некоторые назначения похожи на C-задания;другие на самом деле являются перегруженными вызовами operator=(), и вы никогда не знаете, что получите (конечно, без тщательного изучения). C ++ имеет систему времени выполнения;он просто намного легче, чем тот, что используется для Ruby, Haskell или Scheme.

1 голос
/ 29 октября 2011

Речь идет не о том, чтобы быть «похожим» в любом случае.Речь идет о том, чтобы быть ближе к оборудованию.Ни C, ни C ++ не скрывают от вас никаких мельчайших деталей управления памятью.Поскольку вам приходится думать о таких низкоуровневых вещах, как выравнивание, непрерывный доступ и стек, вы можете написать гораздо более эффективный код.Языки более высокого уровня скрывают это от вас, что делает программирование приятнее, но часто код не настолько оптимизирован, как мог бы.

0 голосов
/ 29 октября 2011

Эволюция языков программирования указывает на то, что чем больше у вас удобства в программировании, тем больше компромисса в производительности вы должны заплатить за это. Для большинства начинающих программистов Java определенно более дружественен для них, чем c или c ++ (управление памятью, заголовочные файлы, контейнеры и т. Д.). C или C ++ быстрее, чем Java, потому что они скомпилированы в машинный код, который можно загружать и запускать напрямую. Но для Java вы можете знать о JRE, который является средой выполнения для Java-кода, поскольку код Java скомпилирован в некоторый код, который понимается только виртуальной машиной Java (который написан c с небольшой сборкой). Платформа .Net для C # подобна JRE для Java. Эта разница в производительности может показаться большой проблемой в некоторых сферах, ориентированных на производительность, но для большинства приложений это едва заметно. Надеюсь, что это объясняет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...