Оптимизация кода C и C++ для простого создания массивов и ввода-выводаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Оптимизация кода C и C++ для простого создания массивов и ввода-вывода

Сообщение Anonymous »

Я пытался убедить моего друга отказаться от использования динамически выделяемых массивов и начать переходить на векторы STL. Я отправил ему пример кода, чтобы показать пару вещей, которые можно сделать с помощью STL и функторов/генераторов:

Код: Выделить всё

#include 
#include 
#include 
#include 

#define EVENTS 10000000

struct random_double {
double operator() () { return (double)rand()/RAND_MAX; }
};

int main(int argc, char **argv){

std::vector vd (EVENTS);

generate(vd.begin(), vd.end(), random_double());
copy(vd.begin(), vd.end(), std::ostream_iterator(std::cout, "\n"));

return 0;
}
Его ответ на это, хотя он и считает его более элегантным, заключается в том, что его собственный код быстрее (почти в 2 раза!) Вот код C, который он ответил :

Код: Выделить всё

#include 
#include 
#include 
#include 

#define EVENTS 10000000

__inline double random_double() {
return (double)rand()/RAND_MAX;
}

int main(int argc, char **argv){
unsigned int i;
double *vd;
vd = (double *) malloc(EVENTS*sizeof(double));

for(i=0;i /dev/null
real    0m14.665s
user    0m14.577s
sys     0m0.092s

> time ./ctest > /dev/null
real    0m8.070s
user    0m8.001s
sys     0m0.072s
Параметры компилятора, использующие g++, были: g++ -finline -funroll-loops. Ничего особенного. Может ли кто-нибудь сказать мне, почему версия C++/STL в этом случае работает медленнее? В чем заключается узкое место, и смогу ли я когда-нибудь убедить своего друга использовать контейнеры STL?

Подробнее здесь: https://stackoverflow.com/questions/193 ... on-and-i-o
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»