Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C или C++ 
:(
    Опции темы
Void
Дата 21.10.2005, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(DeadSoul @ 21.10.2005, 22:11)
В некоторых местах в 19 раз(stringstream vs printf) . Но это скорее исключение.

Скорее, недоразумение авторов конкретной реализации STL smile Разницу больше, чем в 3 раза, мне получить не удалось. В большинстве случаев - вполне приемлемая плата за типобезопасность. Даже паталогически тормознутый boost::format проигрывает sprintf раз в 5-7.

P.S. Пока писал тестик на 20 строк, успел один раз получить AV из-за buffer overrun в sprintf. Нафиг ее, такую "скорость".


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
szz
Дата 21.10.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Цитата(Void @ 21.10.2005, 20:06)
Ну постеснялись хоть бы такой бред говорить...

Мусьё, вот вы и попались! Постеснялись бы стеснять smile Спросите любого программиста 3д игр, почему он пишет на Си а не С++?
Спросите разработчиков того же самого PHP - что, они ради своего удовольствия колупают на Сях? Ах как было бы удобно построить огроменную иерархию классов для парсера PHP! А вот низя )))
Число 8 не с потолка взято, позвольте заметить.

Цитата(DeadSoul @ 21.10.2005, 20:11)
В некоторых местах в 19 раз(stringstream vs printf)

С++ные потоки - вообще уже притчей во язытцах давным-давно стали smile Я говорю даже просто об использовании классов.


Ну все ладно, хватит пустословить. Человек получил ответ на свой вопрос,
Цитата(Void @ 21.10.2005, 20:43)
Пока писал тестик на 20 строк, успел один раз получить AV из-за buffer overrun в sprintf. Нафиг ее, такую "скорость".

Это ручки ))) нечего sprintf ругать

Забавные результаты. Одно включение iostream (супротив stdio.h) должно все на уши поставить.
Как, кстати, тестируем? Чем считаем-с?


--------------------
PM   Вверх
Void
Дата 21.10.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(szz @ 21.10.2005, 23:25)
Мусьё, вот вы и попались! Постеснялись бы стеснять smile Спросите любого программиста 3д игр, почему он пишет на Си а не С++?

А парни из Remedy не знали, и облажалась, выпустив Max Payne 2, написанный на C++... и движок почему-то летает. Или gamedev == Кармак? smile Ну так вроде и он потихоньку на плюсы переходит.
Цитата(szz @ 21.10.2005, 23:25)
Спросите разработчиков того же самого PHP - что, они ради своего удовольствия колупают на Сях? Ах как было бы удобно построить огроменную иерархию классов для парсера PHP! А вот низя )))

Да кто их знает smile У таких больших и древних проектов свои тараканы.
Цитата(szz @ 21.10.2005, 23:25)
Число 8 не с потолка взято, позвольте заметить.

Ну, выкладывайте свой секрет бенчмаркинга smile
Цитата(szz @ 21.10.2005, 23:25)
Я говорю даже просто об использовании классов.

smile Оверхед от косвенности в виртуальных вызовах считать будем?
Цитата(szz @ 21.10.2005, 23:25)
Это ручки ))) нечего sprintf ругать

Ну не смог я с первого раза правильно посчитать в уме необходимый размер буфера. Позор мне за это.
Цитата(szz @ 21.10.2005, 23:25)
Забавные результаты. Одно включение iostream (супротив stdio.h) должно все на уши поставить.

Как?! smile
Цитата(szz @ 21.10.2005, 23:25)
Как, кстати, тестируем? Чем считаем-с?

clock'ом, однако smile
Код
for (int i = 0; i < 1000000; ++i)
    p += sprintf(p, "%i = %lf\n", i, static_cast<double>(i));

vs аналоги.

P. S. Тема отчетливо запахла Религиозными войнами...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
S.A.P.
Дата 21.10.2005, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Цитата(Void @ 21.10.2005, 21:48)
vs аналоги.

а какие еще аналоги?
Код

ostringstream out;
for (int i = 0; i < 1000000; ++i)
       out << i << " = " << static_cast<double>(i) << endl;


дык STL проиграет заведомо smile .
PM MAIL   Вверх
Void
Дата 21.10.2005, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Perchilla @ 22.10.2005, 00:09)
а какие еще аналоги?

std::ostringstream и boost::format

Цитата(Perchilla @ 22.10.2005, 00:09)
дык STL проиграет заведомо

Проиграла. В 3 раза. А не в 8-19, как утверждают smile Про AV см. выше.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
S.A.P.
Дата 21.10.2005, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Void а как тестировал? В случае со sprintf всё в С строку загонял или в string ?
PM MAIL   Вверх
Void
Дата 21.10.2005, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Perchilla @ 22.10.2005, 00:16)
В случае со sprintf всё в С строку загонял или в string ?

А второй вариант... это как вообще? smile В C-строку, конечно. В общем, смотрите сами:
Код
#include <iostream>
#include <sstream>
#include <cstdio>
#include <ctime>

#include <boost/format.hpp>

using namespace std;

int main() {
    ostringstream os;
    clock_t t0 = clock();
    for (int i = 0; i < 1000000; ++i)
        os << i << " = " << static_cast<double>(i) << "\n";
    cout << "ostringstream: " << 1000.0 * (clock() - t0) / CLOCKS_PER_SEC <<
        " ms\n";
    t0 = clock();
    char *s = new char[24000000], *p = s;
    for (int i = 0; i < 1000000; ++i)
        p += sprintf(p, "%i = %lf\n", i, static_cast<double>(i));
    cout << "sprintf: " << 1000.0 * (clock() - t0) / CLOCKS_PER_SEC <<
        " ms\n";
    delete s;
    os.str("");
    t0 = clock();
    boost::format fmt("%1% = %2%\n");
    for (int i = 0; i < 1000000; ++i)
        os << fmt % i % static_cast<double>(i);
    cout << "boost::format: " << 1000.0 * (clock() - t0) / CLOCKS_PER_SEC <<
        " ms\n";
}

Цитата
ostringstream: 7721 ms
sprintf: 3485 ms
boost::format: 15923 ms


Это сообщение отредактировал(а) Void - 21.10.2005, 22:21


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
S.A.P.
Дата 21.10.2005, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Void дык понятное дело, ostringstream string использует, ему расширяться надо каждый раз, а под C строки тут сразу память выделяется .
Добавлено @ 22:38
А у меня вобще интересные тесты:
Цитата

ostringstream: 3953 ms
sprintf: 3094 ms

PM MAIL   Вверх
Void
Дата 21.10.2005, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Perchilla
Переделал, посмотрел. Прирост на пару процентов. Реаллокация - не самое узкое место. Потоки действительно медленнее, но, повторюсь, эта медленность в большинстве случаев оправдывается (типо)безопасностью.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
S.A.P.
Дата 21.10.2005, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Цитата

ostringstream: 3953 ms
sprintf: 3094 ms

это я на VC 71 компилил

а mingw вобще ужас на крыльях ночи выдает

Цитата

ostringstream: 11500 ms
sprintf: 3156 ms

PM MAIL   Вверх
Void
Дата 21.10.2005, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



STLPort, небось? smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
S.A.P.
Дата 21.10.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Цитата(Void @ 21.10.2005, 22:46)
STLPort, небось?

нет, все по старинке smile .
PM MAIL   Вверх
DeadSoul
Дата 21.10.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



[quote=szz, 21.10.2005, 21:25]Цитата (DeadSoul @ 21.10.2005, 20:11)
В некоторых местах в 19 раз(stringstream vs printf)
Обшибся... В 9 раз для MS VC 7. В 19.2 - это boost::lexical_cast
Источник: Саттер,Новые сложные задачи на С++

[quote=szz, 21.10.2005, 21:25]Цитата (Void @ 21.10.2005, 20:43)
Пока писал тестик на 20 строк, успел один раз получить AV из-за buffer overrun в sprintf. Нафиг ее, такую "скорость".
Это ручки ))) нечего sprintf ругать[/quote]
Это означаят, что я как параноик должен проверять каждый символ.



--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
S.A.P.
Дата 21.10.2005, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Цитата(DeadSoul @ 21.10.2005, 23:00)
Обшибся... В 9 раз для MS VC 7. В 19.2 - это boost::lexical_cast
на результаты смотрел? smile . У меня на VC 71 у sprintf прирост скорости не больше 30 процентов, ни о каких разах и речи нет. smile .

А boost::format в mingw 20625 ms работал smile

Это сообщение отредактировал(а) Perchilla - 21.10.2005, 23:33
PM MAIL   Вверх
DeadSoul
Дата 22.10.2005, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(Perchilla @ 21.10.2005, 23:04)
на результаты смотрел?


Perchilla, самому прогонять тескты слишком сложно. Современные компиляторы слишком хорошо оптимизируют. И у тебя стоит двойная цель:
- оставить компилятору возможность для оптимизациии
- убить ненужную оптитмизацию. ПРимер:
Код

for ( int i=0 ; i<1000000 ; ++i );

компилер может выкинуть


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.