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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.94
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
25.07.2012, 07:23     Разница в скорости выполнение программы C++ или C# #1
И так здравствуйте,хотелось бы узнать почему в данном случае(то есть использование 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 сек.

если не в том разделе создал перенесите пожалуйста в нужный
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2012, 07:23     Разница в скорости выполнение программы C++ или C#
Посмотрите здесь:

Visual C++ или C++ Builder в чем разница? C++
Выполнение программы C++
измерение скорости работы блока программы C++
Прерывается выполнение программы C++
C++ разница в скорости выполнения, итератры
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.07.2012, 17:32     Разница в скорости выполнение программы C++ или C# #21
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от diagon Посмотреть сообщение
На самом деле может за счет JIT.
На самом деле я не знаю, что такое JIT и я не знаю языков C#/Java etc (на Java писал курсовик, но не вникал, как это работает).
Но я вижу это так:
С++ транслируется в машинный код, в момент исполнения программы происходит следующее:
процессор:
- дайте инструкцию
инструкция:
- я готова, исполняй меня полностью
процессор:
- готово, дайте следующую инструкцию
и т.д.
С# транслируется в промежуточный код, который исполняется в виртуальной машине
VM:
- дайте инстукцию
инструкция:
- я готова, исполняй меня полностью
VM:
- сейчас я переведу тебя в машинный код
(пол часа спустя)
VM:
- процессор, ты меня слышишь?
процессор:
- да, слышу, че хотела?
VM:
- выполни эту команду
процессор:
- готово, давай следующую
VM:
- ща, у меня тут не все так просто...
и т.д.
исходя из этого представления, я ни когда не поверю, что управляемый код может быть быстрее.
Если я не прав, тогда объясните
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6911 / 5151 / 254
Регистрация: 10.12.2010
Сообщений: 22,660
Записей в блоге: 17
26.07.2012, 17:55     Разница в скорости выполнение программы C++ или C# #22
Ну так а зачем так?
К чему это общение?
Я предпологал что это вызвано необходимость подсчета ссылок и управления ресурсами итп. - тогда не все так очевидно.
modwind
 Аватар для modwind
52 / 52 / 1
Регистрация: 09.03.2012
Сообщений: 101
26.07.2012, 18:00     Разница в скорости выполнение программы C++ или C# #23
Сообщение было отмечено автором темы, экспертом или модератором как ответ
в чем заключается обмен информацией между программой и исполняющей средой и для чего это надо?
Всё несложно. Программа состоит из набора команд. Обычно команды идут сразу к процессору (неуправляемый код). А C# только просит исполняющую среду выполнить эти команды. Среда может сделать то, что просят или отказаться выполнять что-то небезопасное или сделать что-то другое, не уведомив об этом программу (например, вести логи). Также среда может когда ей вздумается приостановить выполнение потока команд (перевести программу в спящий режим) и влезть в данные приложения, поменять их или изменить сам программный код. Иногда это делается из другой программы, в том числе на языке C#.

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

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

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

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

исходя из чего следует, что не факт что водила на ламбо приедет первым...
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.02.2013, 23:38     Разница в скорости выполнение программы C++ или C# #26
Ну и мое объяснение :)
Цитата Сообщение от Kastaneda Посмотреть сообщение
Если я не прав, тогда объясните
Когда вы пишите программу на нативном коде, вы не можете использовать все возможности современных процессоров. И, допустим, в вашей программе есть векторизируемые циклы (а они достаточно часто встречаются). В лучшем случае у вас будет gcc с -O3, который автоматически векторизирует этот цикл с использованием SSE2.
В случае же с байткодом виртуальная машина знает, на какой платформе исполняется программа, и транслирует байткод в нативный код, при этом используя все возможности процессора. То бишь при попадании на современные процессоры ваша программа будет использовать AVX для векторизации. Т.е. допустим, вы на каждой итерации цикла обрабатывали 1 байт массива, но в случае с AVX вы будете обрабатывать 32 байта за итерацию. Это дает ощутимый прирост к производительности.
P.S. C# компилируется не только в байткод(его вроде как вполне можно скомпилировать в .exe), и с++ тоже может компилироваться не только в нативный код(осталось лишь дождаться нормальной поддержки винды llvm'ом).
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.02.2013, 00:27     Разница в скорости выполнение программы C++ или C# #27
Вообще IL-код, в который компилируется C#, никогда не исполняется виртуальной машиной. Это Джава-код живёт в виртуальной песочнице, а IL существует только для того, чтобы быть скормленным JITу или NGENу. Исполняется уже полученный от них нативный код. (Пруф.)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.02.2013, 09:04     Разница в скорости выполнение программы C++ или C# #28
Цитата Сообщение от diagon Посмотреть сообщение
В лучшем случае у вас будет gcc с -O3
ну это может быть так же и -msse4 (-msse4.1, -msse4.2), только в этом случае, конечно же, код не будет исполняться на процессорах, не поддерживающих sse4.
Герц
523 / 340 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
21.02.2013, 11:21     Разница в скорости выполнение программы C++ или C# #29
Так или иначе, проводить замеры на программе, которая каждую итерацию делает вывод в консоль - странная затея.
На вывод n-значного в лучшем случае время O(n), в то время как затраты на инкремент счетчика константны. Вы получили разницу в пределах погрешности, а производительность надо профилировщиком мерить.
palva
 Аватар для palva
2373 / 1595 / 190
Регистрация: 08.06.2007
Сообщений: 6,364
Записей в блоге: 4
21.02.2013, 11:32     Разница в скорости выполнение программы C++ или C# #30
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не может код, выполняемый в виртуальной машине
Возможно вы спутали с Java. Код не выполняется в виртуальной машине. Просто он компилируется при первом запуске программы. (Первом запуске при данной загрузке операционной системы.) Причем компиляция происходит уже с учетом свойств реального процессора. Поэтому такой код, вообще говоря, будет работать никак уж не медленнее, если конечно отбросить время компиляции. При вторичном запуске этой программы компиляции уже не будет. Это, конечно, в идеале так задумано, а в реальности для правильного прохождения этого процесса может возникнуть много помех.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 11:51     Разница в скорости выполнение программы C++ или C#
Еще ссылки по теме:

Как сгенерировать 100 чисел, разница чисел должна быть или -1 или +1 C++
Сравнение скорости, условие или операция C++
Некорректное выполнение программы C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
21.02.2013, 11:51     Разница в скорости выполнение программы C++ или C# #31
Цитата Сообщение от palva Посмотреть сообщение
Возможно вы спутали с Java. Код не выполняется в виртуальной машине
я ж писал
Цитата Сообщение от Kastaneda Посмотреть сообщение
На самом деле я не знаю, что такое JIT и я не знаю языков C#/Java etc
я не спутал, я просто этого не знаю В посте выше лишь предположение как оно работает.
Yandex
Объявления
21.02.2013, 11:51     Разница в скорости выполнение программы C++ или C#
Ответ Создать тему
Опции темы

Текущее время: 17:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru