70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
|
|||||||||||
1 | |||||||||||
Разница в скорости выполнение программы C++ или C#25.07.2012, 07:23. Показов 8796. Ответов 30
Метки нет (Все метки)
И так здравствуйте,хотелось бы узнать почему в данном случае(то есть использование stl) c++ медленнее c# ,запускаю из релиза
если не в том разделе создал перенесите пожалуйста в нужный
0
|
25.07.2012, 07:23 | |
Ответы с готовыми решениями:
30
Разница в скорости выполнения, итераторы В случае ошибки не прервать выполнение программы, а перейти к другой процедуре или к другому месту той же процедуры Оптимизация или увеличение скорости работы программы Замер скорости выполнения программы или оптимизация проекта |
26.07.2012, 17:32 | 21 |
Сообщение было отмечено как решение
Решение
На самом деле я не знаю, что такое JIT и я не знаю языков C#/Java etc (на Java писал курсовик, но не вникал, как это работает).
Но я вижу это так: С++ транслируется в машинный код, в момент исполнения программы происходит следующее: Если я не прав, тогда объясните
8
|
52 / 52 / 2
Регистрация: 09.03.2012
Сообщений: 101
|
|
26.07.2012, 18:00 | 23 |
Сообщение было отмечено как решение
РешениеДаже неуправляемый код не до конца свободен. Его выполнение частично контролирует операционная система (в основном это доступ к определённым ресурсам). Наименее контролируется код, выполняемый в режиме ядра, поэтому в драйверах и возникают синие экраны смерти. Добавлено через 1 минуту Зачем это нужно? Чтобы программа одинаково выполнялась на любом устройстве, независимо от железа и операционной системы. И ещё для обеспечения большей безопасности.
3
|
Каратель
|
|
26.07.2012, 18:03 | 24 |
запуск программы без перекомпеляции на разных платформах
именно, плюс такие плюшки как рефлексия but on the other hand: 1) сегодня не так много платформ как хотелось бы 2) интел поддерживает совместимось ассемблера начиная с Intel 80*
2
|
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
20.02.2013, 23:18 | 25 |
наверно так
Кликните здесь для просмотра всего текста
подъехали два водилы к городу, один на ламборджини (С++) второй на ТАЗике (c#), вот первый (с++) знает, что по городу максимальное ограничение скорости 60 км/ч, и прет 60 нигде не сбавляя хода, ни на поворотах ни на светафорах... ламбо позволяет. второй (с#) едет попроще, на поворотах притормаживает, гдето на светафорах даже останавливается, но видит что в некоторых местах городских улиц стоит знак повышения ограничения скорости на 80, 100, 110 км/ч и прет на тех участках на максимально допустимых скоростях... исходя из чего следует, что не факт что водила на ламбо приедет первым...
0
|
Higher
|
|
20.02.2013, 23:38 | 26 |
Ну и мое объяснение :)
Когда вы пишите программу на нативном коде, вы не можете использовать все возможности современных процессоров. И, допустим, в вашей программе есть векторизируемые циклы (а они достаточно часто встречаются). В лучшем случае у вас будет gcc с -O3, который автоматически векторизирует этот цикл с использованием SSE2. В случае же с байткодом виртуальная машина знает, на какой платформе исполняется программа, и транслирует байткод в нативный код, при этом используя все возможности процессора. То бишь при попадании на современные процессоры ваша программа будет использовать AVX для векторизации. Т.е. допустим, вы на каждой итерации цикла обрабатывали 1 байт массива, но в случае с AVX вы будете обрабатывать 32 байта за итерацию. Это дает ощутимый прирост к производительности. P.S. C# компилируется не только в байткод(его вроде как вполне можно скомпилировать в .exe), и с++ тоже может компилироваться не только в нативный код(осталось лишь дождаться нормальной поддержки винды llvm'ом).
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
21.02.2013, 00:27 | 27 |
Вообще IL-код, в который компилируется C#, никогда не исполняется виртуальной машиной. Это Джава-код живёт в виртуальной песочнице, а IL существует только для того, чтобы быть скормленным JITу или NGENу. Исполняется уже полученный от них нативный код. (Пруф.)
0
|
21.02.2013, 11:21 | 29 |
Так или иначе, проводить замеры на программе, которая каждую итерацию делает вывод в консоль - странная затея.
На вывод n-значного в лучшем случае время O(n), в то время как затраты на инкремент счетчика константны. Вы получили разницу в пределах погрешности, а производительность надо профилировщиком мерить.
0
|
21.02.2013, 11:32 | 30 |
Возможно вы спутали с Java. Код не выполняется в виртуальной машине. Просто он компилируется при первом запуске программы. (Первом запуске при данной загрузке операционной системы.) Причем компиляция происходит уже с учетом свойств реального процессора. Поэтому такой код, вообще говоря, будет работать никак уж не медленнее, если конечно отбросить время компиляции. При вторичном запуске этой программы компиляции уже не будет. Это, конечно, в идеале так задумано, а в реальности для правильного прохождения этого процесса может возникнуть много помех.
0
|
21.02.2013, 11:51 | 31 |
я ж писал
я не спутал, я просто этого не знаю В посте выше лишь предположение как оно работает.
0
|
21.02.2013, 11:51 | |
21.02.2013, 11:51 | |
Помогаю со студенческими работами здесь
31
Как закончить выполнение программы если матрица равна нулю или не существует? Разница с скорости процессоров у Mac, производительность Есть ли существенная разница в скорости под веб? Есть ли разница в скорости между Sata 3 и miniSata Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |