С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Chernomor
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 19
#1

Правда что С быстрее чем С++? - C++

11.02.2010, 21:21. Просмотров 1416. Ответов 26
Метки нет (Все метки)

Имеется в виду на исполнении, а не на момент компиляции...
Наверняка такая тема уже была, но я не нашёл, если дадите ссылку также буду презнателен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2010, 21:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Правда что С быстрее чем С++? (C++):

C# работает быстрее чем С++ - C++
имеется файл типа 6 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0 2.0 3.0 4 5 6 7 1.0...

Быстрее чем цикл - C++
Доброго времени уток дорогие форумчане. Интересует вот какая штуковина, допусти есть программа которая открывает два файла, смотрит на...

C программа компилируется быстрее чем C++ - C++
Почему программа на C компилируется быстрее чем на С++?

Sin быстрее чем из math.h - C++
ребят, вообщем мне задали написать программу которая считала синус быстрее чем из math.h ) скорость должна достигаться путем потери...

Правда что new очень медленная? - C++
Вобщем читал статейки в интернете про операцию new, утечки памяти и функци, которые возвращают массивы и всякие не однородные данные через...

Правда ли, что все цифры равны - C++
Вот такая задача. найти сколько цифр в данном числе равны А. Правда ли, что все цифры в числе равны. первую часть я сделал, а вот...

26
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
11.02.2010, 22:28 #16
Цитата Сообщение от Vourhey Посмотреть сообщение
Мы говорим о языках. А его используют люди. И большинство не сможет этого сделать. А раз уже есть те, кто не сможет, твое заявление о языке - ложь.
перечитывай свою цитату много раз. до тех пор, пока ты не поймёшь, где ошибка в твоей логической цепочке рассуждений.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
11.02.2010, 22:33 #17
Ошибки нет. Языки без людей не существуют. А раз есть люди нарушающие твое заявление о языке, твое заявление - ложь. Все логично.

Добавлено через 4 минуты
zim22, хорошо, фигле спорить. Привожу пример. Самый простой в одну строчку.
C
1
a =b;
А теперь объясни мне, почему этот код будет работать медленнее, чем
Assembler
1
movl (%ebp), %eax
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
11.02.2010, 22:36 #18
Vourhey, ок. приведу аналогию, если так не понимаешь.
что быстрей? автомобиль, развивающий скорость 300 км/час(ассемблер) или черепаха (Си)?
ответ: всё зависит от водителя автомобиля. если за рулём будет блондинка, которая не сможет им управлять - черепаха будет передвигаться быстрее.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
11.02.2010, 22:38 #19
zim22, аналогия ужасна. С чего ты взял, что С черепаха? Ты еще этого не доказал. Выше простейший пример кода. Вот и докажи, что С черепаха. Вперед.
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
11.02.2010, 22:47 #20
асм код быстрее? вопрос исчерпан.
код взят из ссылки, что я приводил выше.
http://stackoverflow.com/questions/5...-faster-than-c

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "stdafx.h"
#include <windows.h>
#include <iostream>
 
using namespace std;
 
float KahanSum
(
  const float *data,
  int n
)
{
   float
     sum = 0.0f,
     C = 0.0f,
     Y,
     T;
 
   for (int i = 0 ; i < n ; ++i)
   {
      Y = *data++ - C;
      T = sum + Y;
      C = T - sum - Y;
      sum = T;
   }
 
   return sum;
}
 
float AsmSum
(
  const float *data,
  int n
)
{
  float
    result = 0.0f;
 
  _asm
  {
    mov esi,data
    mov ecx,n
    fldz
    fldz
l1:
    fsubr [esi]
    add esi,4
    fld st(0)
    fadd st(0),st(2)
    fld st(0)
    fsub st(0),st(3)
    fsub st(0),st(2)
    fstp st(2)
    fstp st(2)
    loop l1
    fstp result
    fstp result
  }
 
  return result;
}
 
int main (int, char **)
{
  int
    count = 1000000;
 
  float
    *source = new float [count];
 
  for (int i = 0 ; i < count ; ++i)
  {
    source [i] = static_cast <float> (rand ()) / static_cast <float> (RAND_MAX);
  }
 
  LARGE_INTEGER
    start,
    mid,
    end;
 
  float
    sum1 = 0.0f,
    sum2 = 0.0f;
 
  QueryPerformanceCounter (&start);
 
  sum1 = KahanSum (source, count);
 
  QueryPerformanceCounter (&mid);
 
  sum2 = AsmSum (source, count);
 
  QueryPerformanceCounter (&end);
 
  cout << "  C code: " << sum1 << " in " << (mid.QuadPart - start.QuadPart) << endl;
  cout << "asm code: " << sum2 << " in " << (end.QuadPart - mid.QuadPart) << endl;
 
  return 0;
}
C code: 500137 in 242311
asm code: 500137 in 117188
0
Chernomor
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 19
11.02.2010, 22:48  [ТС] #21
Эм, я слышал есть асемблерная вставка в Си и если на каком-то участке Си делает немного больше чем хотелось бы можно воспользоватся ею. А насчёт сравнения автамобился и черепахи, я согился бы если ты имел в виду скорость написания программы только в точности да на оборот (си -автомобиль).
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
11.02.2010, 22:50 #22
zim22, я код не читал. Допустим, в это примере асм быстрее. В моем примере асм не быстрее. А что это значит? Значит, фраза, что "асм еще быстрее" - вранье Правильно будет сказать - "в некоторых случаях асм еще быстрее". Смотри. Выше исключение из твоего правила. Могу еще 10 привести, но мне лень )

Добавлено через 51 секунду
Chernomor, да ассемблерные вставки делать можно. Но я пока общался с человеком имел ввиду чистый С ). Хотя, в большинстве случаев так и делается - критичный для скорости код пишется на ассемблере. Чаще всего на ассемблере пишется математическая логика, сложные многочисленные рассчеты. И тут, действительно, ассемблер чаще всего выигрывает.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,826
Записей в блоге: 28
11.02.2010, 22:52 #23
Си++ условно можно считать более медленным, чем Си в основном из-за того, что Си++ обладает гораздо бОльшей библиотечной поддержкой (я имею в виду то, что включено в стандарт). Есть шаблоны, которые позволяют, например, легко работать со списками. Но их реализация слишком универсальная и, например, у программиста нет возможности контролировать процесс выделения памяти. Если мы строим одновременно 10 списков (т.е. добавляем по одному элементу в каждый список по очереди), то в конечном итоге память разляжется так, что элементы разных списков будут лежать не подряд для каждого списка, а вперемешку. И в дальнейшем работа с одним списком из-за того, что он "дырявый", может оказаться медленней из-за того, что такая раскладка памяти плохо укладывается в кэш. Понятно, что для нормального приложения такая магия седьмого порядка не нужна, но там, где требется выжать 100% аппаратной мощности это окажется весьма критичным.

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

Навскидку больше не могу назвать конструкции ЯЗЫКА (а не библиотечной поддержки), где Си++ в чём-то принципиально уступал бы Си.

Что касается ассемблера. На таких простых архитектурах типа i386, компилятор, как правило даёт код по скорости близкий к ассемблеру. Но когда в архитектуре заложены сложные аппаратные возможности (аппаратная накрутка циклов, всякие векторные и матричные операции, предикатные коды, ещё там куча всего), то компилятор, как правило, не в состоянии выжать максимум производительности в боевых режимах: для этого требуется профилирование и куча настроечных опций. Поэтому высокопроизводительные библиотеки обычно пишут либо полностью на ассемблере, либо с использованием ассемблерных вставок. Однако может случиться и так, что компилятор выдаст код лучший, чем на ассемблере, потому что компилятор "знает" про некоторые особенности архитектуры, которые сложно учесть при ручном программировании. Например, если идёт обработка нескольких массивов впермешку, то компилятор может разместить эти объекты в памяти так, чтобы данные при чтении-записи лучше проходили через кэш (чтобы не было выбивания данных из кэша). Для этого нужно хорошо себе представлять, как устроен кэш на конкретной версии процессора.
1
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
11.02.2010, 22:53 #24
Цитата Сообщение от Vourhey Посмотреть сообщение
Правильно будет сказать - "в некоторых случаях асм еще быстрее"
согласен
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,826
Записей в блоге: 28
11.02.2010, 22:57 #25
zim22, по поводу твоего кода. Сильно зависит, какой ты использовал компилятор и с какими опциями. Может ты вообще оптимизации не включил

Добавлено через 3 минуты
Вот ещё. Узкое место Си++ - это шаблоны. Когда компилятор видит шаблонную функцию, то он не вправе делать inline-подстановку, потому что в другом модуле может быть специализация шаблона (о которой компилятор не знает). Многие современные компиляторы используют режимы "вся программа" (когда в объединённом виде компилируется все модули, а не помодульная сборка), но для такого режима как правило достаточно маленького чиха, чтобы оптимизатор отваливал от многих ситуаций. Ассемблерная вставка вполне может быть этим "чихом"
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
11.02.2010, 23:00 #26
Цитата Сообщение от zim22 Посмотреть сообщение
согласен
Ну вот я к тому и вел. Ассемблер - да быстрый.Но не панацея и не "самый быстрый". Все зависит от ситуации.
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,863
11.02.2010, 23:19 #27
По-моему вообще неблагодарное занятие - сравнивать языки программирования. Каждый хорош в определённой ситуации. Писать какой-нибудь органайзер (типа аутлук) на ассемблере - занятие такое же бестолковое, как на том же С++ программулинку, которая должна в полтора килобайта помещаться и при этом решать какую-то параноидально критичную по времени задачу...
0
11.02.2010, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2010, 23:19
Привет! Вот еще темы с ответами:

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Что работает быстрее? - C++
Подскажите пожалуйста, какая из данных реализаций будет работать бытрее? int a = 5; int b = 3; int c = 4; int d,e,f; ...

Умножение - что быстрее - C++
1) a = 0; a = x * y; 2)a = 0; for (int i = 0; i &lt; y; ++i) { a += x; } И, если второй вариант быстрее, при каких Y он...

Что работает быстрее? - C++
Здравствуйте! Друзья, что лучше (правильнее) использовать: for(int i=0; i&lt;strlen(ABC); ++i) {} или int i=0; int...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.