powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тормозит C++?
24 сообщений из 149, страница 6 из 6
Почему тормозит C++?
    #35969766
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СиПиПиGTK -Си
QT - проприетарное поделие

MFC - убожество. точка. Жалкая попытка натащить на Win Api сипипи. Это не ОО-библиотека.

ПС. Почему-то все "крупные фирмы, разрабатывающие ПО на С++, не используют ее, а разрабатывают собственную"

WTL - попытка заменить убожество сверху.

STL - только через 5 лет дядя Степанов осили написать для СиПиПи стандартную библиотеку.
до этого пользы от этого языка было никакой.

MFC - повторяемся.
Qt - вроде как и вовсе бесплатно стало.
MFC - согласен, лажа.
STL - нормальная библиотека. А ещё есть boost!
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #35969890
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonGluk (Kazan)В это можно верить или нет, но Кнут разработал TEX специально чтобы верстать свои книги.Так что обошлось без фотографа Специально поднял иторические сведения. Кнут создал первую версию своего ТеКса в 1977 году. Так-что он никак не мог на нём делать книги в 60х. Да и у меня изначально не было никаких сомнений в том, что книги не верстали на тектовых редакторах в то время.

Ссылку не дам, но в каком-то из предисловий говорилось, что прежде чем сесть за верстку "Искусства программирования", Кнут довел до ума TEX. И было это явно не в 60 году.
Возможно имелось в виду не первое издание
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #35970204
vazhnecki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно сказать что провокация топикстартера удалась :)
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #35970874
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vazhneckiМожно сказать что провокация топикстартера удалась :)
Ну и к чему это было сказано? Тут же не ПТ.
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #35971060
Rdtsc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonGluk (Kazan)В это можно верить или нет, но Кнут разработал TEX специально чтобы верстать свои книги.Так что обошлось без фотографа Специально поднял иторические сведения. Кнут создал первую версию своего ТеКса в 1977 году. Так-что он никак не мог на нём делать книги в 60х. Да и у меня изначально не было никаких сомнений в том, что книги не верстали на тектовых редакторах в то время.

Ссылку, пожалуйста. Чуть чаще чем в каждом мануале по TeX говорится о том, что первый том Кнута верстали издатели, и именно их некачественная работа заставила разработать эту систему. Начиная со второго тома Кнут использовал только тех.

По своему опыту скажу что хоть система хоть и не без граблей, но это единственная годная программа для верстки, идеологически (отделяет содержание документа от оформления).

Программа работала и работает на любой системе, начиная с доса и os/2 и заканчивая современными линуксами и юниксами, и win nt, это мс офис 2007 требует производительности как у системы управления спутниками...
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #35971175
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не хочу с вами спорить. Для меня в этом вопросе всё предельно ясно. Я всего-лишь указал на на историческое несоответствие. Это равносильно тому что заявить о использовании реактивных самолётов в Первой Мировой войне.

Ну а ссылки можете легко нагуглить.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Почему тормозит C++?
    #39571090
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСиПиПи,

Вот код на c++ который создает 10 000 000 объектов за 0.27 секунды ( на моем компе ).
Если не тяжело приведи плиз код на шарпе который сделает это быстрее

#include <iostream>
#include <time.h>

const int NUM = 10000000;

class test
{
private:
int a,b,c;
public:
test(int aa):a(aa),b(aa),c(aa){}
void print()
{
std::cout << a << " " << b << " " << c << std::endl;
}
~test(){}
};

int main()
{
clock_t t1 = clock();
test *big_arr = (test *)new char[ NUM * sizeof(test)];

if( big_arr )
{
for( int i = 0; i< NUM; i ++ )
{
new(big_arr+i)test(i);
}

/* for( int i = 0; i< NUM; i ++ )
{
big_arr[i].print();
}
*/
for( int i = 0; i< NUM; i ++ )
{
big_arr[i].~test();
}
delete []((char *)big_arr);

std::cout << "Work time = " << ((double)(clock() - t1 )/ (double) CLOCKS_PER_SEC ) << std::endl;
}
else
std::cout << "Not enought memory" << std::endl;
return 0;
}

Цитата с самого начала темы...

А кто-нибудь этот код выполнял? Или хоть по пялился внимательно? Дык вот, никакие 100000000 объектов динамически (в хипе) тут не создаются. Единственный new здесь создает массив, где лежат объекты (не указатели на объекты), а единственный delete грохает весь массив. В цикле же выполняются только конструкторы и деструкторы (оптимизатор второй цикл вообще киляет, т.к. деструктор пустой). Если же написать все по честному, типа:

#include <iostream>
#include <time.h>

const int NUM = 100000000;

class test
{
private:
int a, b, c;
public:
test() {}
test(int aa) :a(aa), b(aa), c(aa){}
void print()
{
std::cout << a << " " << b << " " << c << std::endl;
}
~test(){}
};

int main()
{
clock_t t1 = clock();
test** big_arr = new test*[NUM];


if (big_arr)
{
for (int i = 0; i< NUM; i++)
{
big_arr[i] = new test(i);
}

for (int i = 0; i< NUM; i++)
{
delete big_arr[i];
}
delete[] big_arr;

std::cout << "Work time = " << ((double)(clock() - t1) / (double)CLOCKS_PER_SEC) << std::endl;
}
else
std::cout << "Not enought memory" << std::endl;
return 0;
}

То расклад совсем другой... new срабатываем мгновенно, а вот конца цикла 100 000 000 с delete (на MSVC 2013 64бит) я вообще не дождался. Цикл c 1 000 000 delete занял 3 минуты.
Из этого следует только то, что у MSVC г-нный менеджер памяти, и в MSVC не стоит использовать new/delete в циклах. Причем г-ным обзываю обоснованно, т.к. аналогичная задачка (100 000 000 new/delete), например, в Delphi (64бит) решается за 12 сек (6 сек new, 6 сек delete) без оптимизатора.

type
TTestMem=class
a,b,c: integer;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a: array of TTestMem;
j: integer;
begin
SetLength(a,100000000);
for j:=0 to Length(a)-1 do
a[j]:=TTestMem.Create;

for j:=0 to Length(a)-1 do
a[j].Free;

a:=nil;
end;

Очень хочется верить, что это проблема только MSVC и есть компиллеры C++ (особенно интересно под windows) в которых можно спокойно пользоваться динамической памятью (heep) в критическом блоке...
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571092
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichaleаналогичная задачка (100 000 000 new/delete), например, в Delphi (64бит) решается за 12
сек (6 сек new, 6 сек delete) без оптимизатора.

Да, вот только ты в Дельфи использовал почему-то умолчательный конструктор вместо
конструктора с тремя присваиваниями внутри.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571095
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторnikichale
аналогичная задачка (100 000 000 new/delete), например, в Delphi (64бит) решается за 12
сек (6 сек new, 6 сек delete) без оптимизатора.

Да, вот только ты в Дельфи использовал почему-то умолчательный конструктор вместо
конструктора с тремя присваиваниями внутри.


да, и добавление 3х присвоений затормозит выполнение на 3мин * 10, как в MSVC
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571097
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichaleда, и добавление 3х присвоений затормозит выполнение на 3мин * 10, как в MSVC

А чего ты ожидал от обращений к невыравненной памяти за пределами процессорного кэша?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571210
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
А чего ты ожидал от обращений к невыравненной памяти за пределами процессорного кэша?..


ну добавил я 3 присвоения - естественно на время не сказалось вообще. Да и странно это было бы, new и delete (Create/Free) все таки весят поболе, чем 3 присвоения
Код: pascal
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.
type
  TTestMem=class
    a,b,c: integer;
    constructor Create(v: integer);
  end;

constructor TTestMem.Create(v: integer);
begin
  a:=v;
  b:=v;
  c:=v;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a: array of TTestMem;
    j: integer;
begin
  SetLength(a,100000000);
  for j:=0 to Length(a)-1 do
    a[j]:=TTestMem.Create(j);

  for j:=0 to Length(a)-1 do
    a[j].Free;

 a:=nil;
end;
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571374
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichaleДык вот, никакие 100000000 объектов динамически (в хипе) тут не создаются


Так не 100000000, не объектов, или не в хипе ? Что конкретно из этого не вполняет код? :)

Впрочем даже твой код при компиляции без оптимизации выполняется за 4.5 сек.

HP:~/dev/$ g++ test.cpp -o test && ./test
Work time = 4.52119

HP:~/dev/$ uname -a
Linux HP 3.13.0-133-generic #182-Ubuntu SMP Tue Sep 19 15:49:21 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

HP:~/dev/$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

HP:~/dev/$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
stepping : 9
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571454
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сlihlt Так не 100000000, не объектов, или не в хипе ? Что конкретно из этого не вполняет код? :)

Пример создает 100000000 раз - да, объектов - да, в хипе - да, но пожалуй не динамически, т.к. new/delete выполняется 1 раз в начале и в конце (хитрый new в цикле, как я понимаю память не выделяет).
Очень рад за gcc, что имеет хороший менеджер памяти. Интересно у Qt под винды есть проблемы динамическим выделением памяти?
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571481
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichaleПример создает 100000000 раз - да, объектов - да, в хипе - да, но пожалуй не динамически, т.к. new/delete выполняется 1 раз в начале и в конце (хитрый new в цикле, как я понимаю память не выделяет).
Так реализованы пулы объектов. Это даже можно синтаксически реализовать как обычный new/delete,
и тогда вы бы даже не догадались что там под капотом память выделяется большими блоками.
Это все не означает что это не динамические объекты.
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571495
clihlt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichale,

Да new в цикле ничего не выделяет, если сам конструктор ничего не выделяет.
А так вполне себе динамически.
Если есть необходимость выделять и удалять по 100500 мелких объектов быстро,
создаешь список вот таких пулов.
Каждый пул содержит N преалоцированных объектов, надо выделить объект - вызываешь конструктор, удалить - деструктор.
Кончилось место в пуле - аллоцируешь новый.
Да это не супер оптимально по объемам отжираемой памяти, но если критично именно время аллокации и деалокации, то так извернутся можно.
Фишка в том, что менеджед языки не дают такой возможности (покрайней мере тут об этом никто ничего не сказал). Да и вроде судя из експериментов вообще не дают стока выделить. :)
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571517
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще один феномен C++ в исполнении мелкософт (MSVC 2013). Писал на нем проект по разбору больших xml файлов (OpenStreetMap). Сразу пришлось отказаться от всех средств неявно использующих new/delete (например, std::string), дерево объектов XML также строилось жутко медленно. В конечном итоге вместо C++ остался голый C и вся обработка происходила в событиях "начало тэга" и "конец тега". Теперь прикол, чисто в демо целях конечный результат нужно было выдать в текстовом csv формате - не стал ничего оптимизировать и использовал текстовый файловый поток и операцию <<, выводил строки с именами объектов и вещественные числа с координатами объектов, и что же - это сожрало больше 90% всего времени обработки XML! При этом проц занимался полностью, половина процессорного времени была системным, у процесса быстро росло PageFaults, а вывод в файл происходил со скоростью 200кб/сек. Больно и обидно мне стало за C++, которым, из-за программистов MS, попользоваться мне просто не удалось
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571526
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichaleЕще один феномен C++ в исполнении мелкософт (MSVC 2013). Писал на нем проект по разбору больших xml файлов (OpenStreetMap). Сразу пришлось отказаться от всех средств неявно использующих new/delete (например, std::string), дерево объектов XML также строилось жутко медленно. В конечном итоге вместо C++ остался голый C и вся обработка происходила в событиях "начало тэга" и "конец тега". Теперь прикол, чисто в демо целях конечный результат нужно было выдать в текстовом csv формате - не стал ничего оптимизировать и использовал текстовый файловый поток и операцию <<, выводил строки с именами объектов и вещественные числа с координатами объектов, и что же - это сожрало больше 90% всего времени обработки XML! При этом проц занимался полностью, половина процессорного времени была системным, у процесса быстро росло PageFaults, а вывод в файл происходил со скоростью 200кб/сек. Больно и обидно мне стало за C++, которым, из-за программистов MS, попользоваться мне просто не удалось

Сказки дадюшки Римуса на нашем форуме...
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571637
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, каюсь, поторопился с выводами, вывод в поток там был не причем - сам лажанулся... Но польза от публикации в форуме на лицо - баг то нашелся.
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571709
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что за зверь сожрал 90% ?
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571808
nikichale
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonТак что за зверь сожрал 90% ?
Амперсандик перед параметром ф-ии потерялся, а параметр был vector даблов длиной тыщ 100...
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39571904
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СиПиПиП.С. Посмотрите на код, генерируемый GCC - это разве можно назвать оптимизацией?
Смотрю. Регулярно. Особенно если компилю по AVR (Atmel) или ARM (STM32). Оптимизация на весьма высоком уровне. Желание свалиться на ассемблер возникает очень редко.
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39574090
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikichalemaytonТак что за зверь сожрал 90% ?
Амперсандик перед параметром ф-ии потерялся, а параметр был vector даблов длиной тыщ 100...
Это позор. Вы согласны? :)
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39574154
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто позор. Вы согласны? :)
Ну, так-то, да. Если он потерялся по невнимательности, это одно. А то вот у меня было когда-то, я особо не понимал разницы, между, например CString и const CString& в качестве входного неизменяемого внутри функции параметра. Работает же одинаково!

Надо создать ветку "пятничный позор"
...
Рейтинг: 0 / 0
Почему тормозит C++?
    #39574260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь что не совсем пятнично выйдет
...
Рейтинг: 0 / 0
24 сообщений из 149, страница 6 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему тормозит C++?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]