Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2013, 14:40   #1
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию C++ медленнее чем C#

на соседнем форуме в одной теме один парнишка привел тесты программ на C++ и C# - C++ - http://ideone.com/23N3nB , и C# - http://ideone.com/7TTk9l , сами можете видеть, что с++ уступает по скорости, хоть и на десяток мс, но уступает. были написаны те же приложения, но уже на локальном компьютере, результаты оказались еще печальнее.
всегда считал, что плюсы более шустрей работают, чем C#. а это просто поставило меня в ступор. смотрел лекции, где преподаватели со стажем говорят, что C# и другие подобные ему языки наоборот медленнее.
что можете сказать по этому поводу?
winhttp вне форума Ответить с цитированием
Старый 16.02.2013, 15:53   #2
nubak
Пользователь
 
Регистрация: 26.01.2013
Сообщений: 18
По умолчанию

Выложи коды тут, а то у меня браузер ругается на ссылки.
nubak вне форума Ответить с цитированием
Старый 16.02.2013, 15:56   #3
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

А что значит memory? Выделенная память или какая?
И как проводились измерения времени выполнения? Насколько они точные? Сомнительный способ оценивать скорость.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 15:57   #4
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

C++ -
Код:
#include <iostream>
#include <math.h>
 
using namespace std;
 
int main()
{
    int iters = 100;
    double a = 0;
    for (int q = 0; q < iters; q++)
        for (int i = 0; i < 1000000; i++)
            if (i%2 == 0) a+= sin(i); else a -= sin(i);
    cout << a;
    return 0;
}
# 1: скрыть clone input 60 days 23 hours ago

результат: Успешно время: 5.69s память: 2680 kB возвращаемое значение: 0
ввод: нет
вывод:
15.7721

C# -
Код:
using System;
 
namespace ConsoleApplication6
{
    internal class Program
    {
        private static void Main()
        {
            int iters = 100;
            double a = 0;
            for (int q = 0; q < iters; q++)
                for (int i = 0; i < 1000000; i++)
                    if (i%2 == 0) a += Math.Sin(i); else a -= Math.Sin(i);
            Console.WriteLine(a);
        }
    }
}
# 1: скрыть clone input 60 days 23 hours ago

результат: Успешно время: 5.5s память: 33912 kB возвращаемое значение: 0
ввод: нет
вывод:
15.7720515983155
winhttp вне форума Ответить с цитированием
Старый 16.02.2013, 16:25   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Та ну, бред. Конечно безусловно можно написать программу на c# не уступая в скорости плюсам, но не во всех случаях. Возможно, в данной программе алгоритм вычисления синуса может работает быстрее чем на плюсах, хотя может и не это дает такой результат, какие-то внутренние особенности компилятора мат. вычислений дали небольшой приоритет скорости.
Но а если писать большие системы? И заметьте, в основном большие системы и пишутся на плюсах и ассемблере. Вывод?

Последний раз редактировалось coNsept; 16.02.2013 в 16:28.
coNsept вне форума Ответить с цитированием
Старый 16.02.2013, 16:54   #6
winhttp
Пользователь
 
Регистрация: 29.07.2012
Сообщений: 98
По умолчанию

Цитата:
Сообщение от coNsept Посмотреть сообщение
Та ну, бред. Конечно безусловно можно написать программу на c# не уступая в скорости плюсам, но не во всех случаях. Возможно, в данной программе алгоритм вычисления синуса может работает быстрее чем на плюсах, хотя может и не это дает такой результат, какие-то внутренние особенности компилятора мат. вычислений дали небольшой приоритет скорости.
Но а если писать большие системы? И заметьте, в основном большие системы и пишутся на плюсах и ассемблере. Вывод?
была написана программа для сортировки массива методом пузырька, и тут тоже C++ проигрывает по скорости.
мне бы очень хотелось задать этот вопрос какому нибудь преподавателю, который грамотно бы обьяснил это явление... но не имею такой возможности - я любитель, и на программиста не учусь/учился.
а то, что в инете говорят - это лишь высер, перемежающийся с тонким троллингом
Все же на локальной машине результаты были не правильные вроде. загрузил исходники на ideone, С++ оказался шустрей. вот линки на результаты - С++ - http://ideone.com/QiS0aC , С# - http://ideone.com/dUgKRj

Последний раз редактировалось winhttp; 16.02.2013 в 17:35.
winhttp вне форума Ответить с цитированием
Старый 16.02.2013, 22:09   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

На ideone неизвестно какие ключи компиляции, а время от этого сильно зависеть может.
Somebody вне форума Ответить с цитированием
Старый 16.02.2013, 22:29   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Проверил у себя
У плюсов: 7426 тиков
У шарпа: 6536
VS2010

Кстати:
FPC: 5257 тиков

Интересно сколько чистый ассемблер даст...
I'm learning to live...

Последний раз редактировалось Stilet; 16.02.2013 в 22:39.
Stilet вне форума Ответить с цитированием
Старый 16.02.2013, 22:41   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
У плюсов: 7426 тиков
У шарпа: 6536
Это непосредственно сами вычисления с максимальной оптимизацией или как?
Somebody вне форума Ответить с цитированием
Старый 16.02.2013, 22:52   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Это непосредственно сами вычисления с обычными настройками компилятора по принципу "Поставил и не лазил в настройках", т.е. то что стоит у большинства новичков сразу после инсталляции.

Стало интересно:
Код:
format PE console
entry start
 
include 'D:\fasmw16726\INCLUDE\win32a.inc'
section '.data' data readable writeable
message db '%d',0

section '.code' code readable executable
start:
 invoke GetTickCount
 push eax

 xor esi,esi
 mov ecx,100
aga:
 xchg ecx,esi
 mov ecx, 1000000
 ogo:
  finit
  push ecx
  fld dword [esp]
  fsin
  pop ecx
 loop ogo;
 xchg ecx,esi
loop aga

 invoke GetTickCount
 pop ebx
 sub eax,ebx
  cinvoke printf,message,eax
  cinvoke getch
 ret

section '.idata' import data readable
library kernel,'kernel32.dll',msvcrt,'msvcrt.dll'


import kernel,\
       GetTickCount,'GetTickCount'
import msvcrt,\
       setlocale,'setlocale',\
       printf,'printf',\
       getch,'_getch'
Дает 15990 на моем CoreDuo. Видимо оптимизаторы в Си и паскале вовсю коцают тот код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в чем ошибка ?? SuperHuman Общие вопросы C/C++ 3 04.06.2012 21:30
Почему Excel 2010 выполняет поиск гораздо медленнее чем Excel 2003 Sprat Microsoft Office Excel 1 25.10.2011 05:34
Во общем надо написать программу "дождь"...и чтоб некоторые капельки двигались быстрее, другие медленнее. zzz6 Помощь студентам 6 07.07.2011 10:57
В Excel 2010 макрос медленнее в 3 раза чем в 2007 Владимир. Microsoft Office Excel 12 22.05.2010 18:24
В чем ошибка? delphyok Паскаль, Turbo Pascal, PascalABC.NET 6 24.02.2009 23:33