Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/50: Рейтинг темы: голосов - 50, средняя оценка - 4.72
 Аватар для xADMIRALx
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291

Разница в скорости выполнение программы C++ или C#

25.07.2012, 07:23. Показов 10115. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
И так здравствуйте,хотелось бы узнать почему в данном случае(то есть использование stl) c++ медленнее c# ,запускаю из релиза

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale>
 
 
int main()
{
    setlocale(LC_ALL,".1251");
    time_t f = clock();
    for (int i = 0; i < 100000;i++)
        printf("%d\n",i);
 
    printf("Программа выполнялась : %d sek\n",(clock() - f) / CLOCKS_PER_SEC);
 
 
 
 
    system("PAUSE");
    return 0;
 
}
C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace test_in_cshape
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime start = DateTime.Now;
           
            for (int i = 0; i < 100000; i++)
            {
                Console.WriteLine("{0}",i);
            }
            DateTime finish = DateTime.Now;
            Console.WriteLine("Программа выполнялась : {0}", finish.Second - start.Second);
            Console.ReadLine();
 
        }
    }
}
Запускаю одновременно 2 программы c# показывает 10 сек,с++ 14 сек.

если не в том разделе создал перенесите пожалуйста в нужный
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.07.2012, 07:23
Ответы с готовыми решениями:

Разница в скорости выполнения, итераторы
Википедия for (ContainerType::iterator it = C.begin(),end = C.end(); it != end; ++it) { std::cout &lt;&lt; *it &lt;&lt; std::endl; } ...

В случае ошибки не прервать выполнение программы, а перейти к другой процедуре или к другому месту той же процедуры
Прошу помочь: в случае ошибки не прервать выполнение программы, а перейти к другой процедуре или к другому месту той же процедуры.

Оптимизация или увеличение скорости работы программы
Доброго времени суток, программисты! Буквально на днях столкнулся с проблемой, связанной с перегрузкой &quot;дельфина&quot; при...

30
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
26.07.2012, 17:32
Лучший ответ Сообщение было отмечено как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от diagon Посмотреть сообщение
На самом деле может за счет JIT.
На самом деле я не знаю, что такое JIT и я не знаю языков C#/Java etc (на Java писал курсовик, но не вникал, как это работает).
Но я вижу это так:
С++ транслируется в машинный код, в момент исполнения программы происходит следующее:
процессор:
- дайте инструкцию
инструкция:
- я готова, исполняй меня полностью
процессор:
- готово, дайте следующую инструкцию
и т.д.
С# транслируется в промежуточный код, который исполняется в виртуальной машине
VM:
- дайте инстукцию
инструкция:
- я готова, исполняй меня полностью
VM:
- сейчас я переведу тебя в машинный код
(пол часа спустя)
VM:
- процессор, ты меня слышишь?
процессор:
- да, слышу, че хотела?
VM:
- выполни эту команду
процессор:
- готово, давай следующую
VM:
- ща, у меня тут не все так просто...
и т.д.
исходя из этого представления, я ни когда не поверю, что управляемый код может быть быстрее.
Если я не прав, тогда объясните
8
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
26.07.2012, 17:55
Ну так а зачем так?
К чему это общение?
Я предпологал что это вызвано необходимость подсчета ссылок и управления ресурсами итп. - тогда не все так очевидно.
0
 Аватар для modwind
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
26.07.2012, 18:00
Лучший ответ Сообщение было отмечено как решение

Решение

в чем заключается обмен информацией между программой и исполняющей средой и для чего это надо?
Всё несложно. Программа состоит из набора команд. Обычно команды идут сразу к процессору (неуправляемый код). А C# только просит исполняющую среду выполнить эти команды. Среда может сделать то, что просят или отказаться выполнять что-то небезопасное или сделать что-то другое, не уведомив об этом программу (например, вести логи). Также среда может когда ей вздумается приостановить выполнение потока команд (перевести программу в спящий режим) и влезть в данные приложения, поменять их или изменить сам программный код. Иногда это делается из другой программы, в том числе на языке C#.

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

Добавлено через 1 минуту
Зачем это нужно? Чтобы программа одинаково выполнялась на любом устройстве, независимо от железа и операционной системы. И ещё для обеспечения большей безопасности.
3
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.07.2012, 18:03
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так а зачем так?
К чему это общение?
запуск программы без перекомпеляции на разных платформах
Цитата Сообщение от Avazart Посмотреть сообщение
Я предпологал что это вызвано необходимость подсчета ссылок и управления ресурсами итп.
именно, плюс такие плюшки как рефлексия
but on the other hand:
1) сегодня не так много платформ как хотелось бы
2) интел поддерживает совместимось ассемблера начиная с Intel 80*
2
Кодогенератор
 Аватар для hepper
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
20.02.2013, 23:18
Цитата Сообщение от Kastaneda Посмотреть сообщение
С# транслируется в промежуточный код, который исполняется в виртуальной машине
Кликните здесь для просмотра всего текста
VM:
- дайте инстукцию
инструкция:
- я готова, исполняй меня полностью
VM:
- сейчас я переведу тебя в машинный код
(пол часа спустя)
VM:
- процессор, ты меня слышишь?
процессор:
- да, слышу, че хотела?
VM:
- выполни эту команду
процессор:
- готово, давай следующую
VM:
- ща, у меня тут не все так просто...
и т.д.

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

подъехали два водилы к городу, один на ламборджини (С++) второй на ТАЗике (c#),
вот первый (с++) знает, что по городу максимальное ограничение скорости 60 км/ч, и прет 60 нигде не сбавляя хода, ни на поворотах ни на светафорах... ламбо позволяет.
второй (с#) едет попроще, на поворотах притормаживает, гдето на светафорах даже останавливается, но видит что в некоторых местах городских улиц стоит знак повышения ограничения скорости на 80, 100, 110 км/ч и прет на тех участках на максимально допустимых скоростях...

исходя из чего следует, что не факт что водила на ламбо приедет первым...
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.02.2013, 23:38
Ну и мое объяснение :)
Цитата Сообщение от Kastaneda Посмотреть сообщение
Если я не прав, тогда объясните
Когда вы пишите программу на нативном коде, вы не можете использовать все возможности современных процессоров. И, допустим, в вашей программе есть векторизируемые циклы (а они достаточно часто встречаются). В лучшем случае у вас будет gcc с -O3, который автоматически векторизирует этот цикл с использованием SSE2.
В случае же с байткодом виртуальная машина знает, на какой платформе исполняется программа, и транслирует байткод в нативный код, при этом используя все возможности процессора. То бишь при попадании на современные процессоры ваша программа будет использовать AVX для векторизации. Т.е. допустим, вы на каждой итерации цикла обрабатывали 1 байт массива, но в случае с AVX вы будете обрабатывать 32 байта за итерацию. Это дает ощутимый прирост к производительности.
P.S. C# компилируется не только в байткод(его вроде как вполне можно скомпилировать в .exe), и с++ тоже может компилироваться не только в нативный код(осталось лишь дождаться нормальной поддержки винды llvm'ом).
1
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
21.02.2013, 00:27
Вообще IL-код, в который компилируется C#, никогда не исполняется виртуальной машиной. Это Джава-код живёт в виртуальной песочнице, а IL существует только для того, чтобы быть скормленным JITу или NGENу. Исполняется уже полученный от них нативный код. (Пруф.)
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
21.02.2013, 09:04
Цитата Сообщение от diagon Посмотреть сообщение
В лучшем случае у вас будет gcc с -O3
ну это может быть так же и -msse4 (-msse4.1, -msse4.2), только в этом случае, конечно же, код не будет исполняться на процессорах, не поддерживающих sse4.
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
21.02.2013, 11:21
Так или иначе, проводить замеры на программе, которая каждую итерацию делает вывод в консоль - странная затея.
На вывод n-значного в лучшем случае время O(n), в то время как затраты на инкремент счетчика константны. Вы получили разницу в пределах погрешности, а производительность надо профилировщиком мерить.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
21.02.2013, 11:32
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не может код, выполняемый в виртуальной машине
Возможно вы спутали с Java. Код не выполняется в виртуальной машине. Просто он компилируется при первом запуске программы. (Первом запуске при данной загрузке операционной системы.) Причем компиляция происходит уже с учетом свойств реального процессора. Поэтому такой код, вообще говоря, будет работать никак уж не медленнее, если конечно отбросить время компиляции. При вторичном запуске этой программы компиляции уже не будет. Это, конечно, в идеале так задумано, а в реальности для правильного прохождения этого процесса может возникнуть много помех.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
21.02.2013, 11:51
Цитата Сообщение от palva Посмотреть сообщение
Возможно вы спутали с Java. Код не выполняется в виртуальной машине
я ж писал
Цитата Сообщение от Kastaneda Посмотреть сообщение
На самом деле я не знаю, что такое JIT и я не знаю языков C#/Java etc
я не спутал, я просто этого не знаю В посте выше лишь предположение как оно работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2013, 11:51
Помогаю со студенческими работами здесь

Замер скорости выполнения программы или оптимизация проекта
Всем привет, не знаете как лучше замерить скорость программы ?, чтобы можно было сравнить в какой среде (delphi с многопоточностью или c++...

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

Разница с скорости процессоров у Mac, производительность
Всем привет! Друзья, очень глупый вопрос хочу спросить несмотря на то что я связан с компьютерами последние лет 20, просьба не...

Есть ли существенная разница в скорости под веб?
Привет! Есть каталог товаров на сервер под веб. С каталогом работают на локальных машинах и данные репликацией отправляют на...

Есть ли разница в скорости между Sata 3 и miniSata
Доброго времени суток . Собираюсь приобрести SSD в ноутбук , мне не нужен CD-привод и есть один свободный miniSata . Вычитал, что можно с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru