Форум программистов, компьютерный форум CyberForum.ru

Правда что С быстрее чем С++? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив http://www.cyberforum.ru/cpp-beginners/thread94648.html
Привет.Помогите пожалуйста решить задачу. В массиве А вставить после первого максимального элемента k наименьших элементов. например 2 5 6 3 6 8 6 4 4 с клавы вводим k=3 получим 2 5 6 3 6 8 2 3 4 4 6 4 (если можно с пояснениями) Заранее спасибо. P.S. Использовать указатели и функции.
C++ Ввод-вывод данных Ввести как значение сталых символы с кодами 186, 201, 205. Вывести в рядок символ с кодом 201, и на том же рядке - 3 символа с кодом 205. А в трех следующих рядках - по одному символу 186. Знаю задача вроде не тяжелая...но я только осваиваю этот язык, но пока ниче не получается. Буду очень рад за любую помощь. http://www.cyberforum.ru/cpp-beginners/thread94635.html
Строки из файла C++
Доброго времени суток. Мне задали задачу по С (в Visual C++), сдавать завтра. В С немного разбираюсь, но тему файлы и строки не понял. То есть совсем не понял. Кроме того, наш преподаватель не принимает без объяснений, поэтому, пожалуйста, вставляйте комменты. Помогите, пожалуйста, решить эту задачу. В файл input.txt Вводится строка Имя:Фамилия:Отчество:Возраст
массив C++
Помогите решить задачу: Определить последний отрицательный максимальный элемент и его позицию в массиве, а также количество положительных элементов.
C++ Создать класс Int http://www.cyberforum.ru/cpp-beginners/thread94616.html
Создайте класс Int, имитирующий стандартный тип int. Единственное поле этого класса должно иметь тип int. Создайте методы, которые будут устанавливать значение поля, равным нулю, инициализировать его целым значением, выводить значение поля на экран и складывать два значения типа Int. Напишите программу, в которой будут созданы три объекта класса Int, два из которых будут...
C++ Описать функцию CircleS(R) Описать функцию CircleS(R) вещественного типа, находящую площадь круга радиуса R(R - вещественное). С помощью этой функции найти площади трех кругов с данными радиусами. Площидь круга радиусом R вычисляеться по формуле S=p*(R*R). p=3.14. Задача на С подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17471 / 5709 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 26
11.02.2010, 22:52     Правда что С быстрее чем С++?
Си++ условно можно считать более медленным, чем Си в основном из-за того, что Си++ обладает гораздо бОльшей библиотечной поддержкой (я имею в виду то, что включено в стандарт). Есть шаблоны, которые позволяют, например, легко работать со списками. Но их реализация слишком универсальная и, например, у программиста нет возможности контролировать процесс выделения памяти. Если мы строим одновременно 10 списков (т.е. добавляем по одному элементу в каждый список по очереди), то в конечном итоге память разляжется так, что элементы разных списков будут лежать не подряд для каждого списка, а вперемешку. И в дальнейшем работа с одним списком из-за того, что он "дырявый", может оказаться медленней из-за того, что такая раскладка памяти плохо укладывается в кэш. Понятно, что для нормального приложения такая магия седьмого порядка не нужна, но там, где требется выжать 100% аппаратной мощности это окажется весьма критичным.

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

Навскидку больше не могу назвать конструкции ЯЗЫКА (а не библиотечной поддержки), где Си++ в чём-то принципиально уступал бы Си.

Что касается ассемблера. На таких простых архитектурах типа i386, компилятор, как правило даёт код по скорости близкий к ассемблеру. Но когда в архитектуре заложены сложные аппаратные возможности (аппаратная накрутка циклов, всякие векторные и матричные операции, предикатные коды, ещё там куча всего), то компилятор, как правило, не в состоянии выжать максимум производительности в боевых режимах: для этого требуется профилирование и куча настроечных опций. Поэтому высокопроизводительные библиотеки обычно пишут либо полностью на ассемблере, либо с использованием ассемблерных вставок. Однако может случиться и так, что компилятор выдаст код лучший, чем на ассемблере, потому что компилятор "знает" про некоторые особенности архитектуры, которые сложно учесть при ручном программировании. Например, если идёт обработка нескольких массивов впермешку, то компилятор может разместить эти объекты в памяти так, чтобы данные при чтении-записи лучше проходили через кэш (чтобы не было выбивания данных из кэша). Для этого нужно хорошо себе представлять, как устроен кэш на конкретной версии процессора.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru