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

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

25.07.2012, 07:23. Показов 10491. Ответов 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,932
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru