VirtualIreland.ru - Виртуальная Ирландия
Вернуться   VirtualIreland.ru - Виртуальная Ирландия > Живем в Ирландии > IT и Связь

IT и Связь Обсуждение "айтишных" вопросов и средств связи

 
 
Опции темы Опции просмотра
Старый 20.11.2005, 10:09   #1
My name is Exaybachay
 
Аватар для KaraNagai
 
Откуда: Дублин, Ирландия
Сообщений: 21,481
Благодарности: 12,152 в 4,948 сообщениях Поиск благодарностей KaraNagai
По умолчанию java vs c++ ;))

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

и вот результат:

код на с++:

Код:
#include <stdio.h>

void main() {
	int N = 10000;
	int * a = new int[N];
	int i,j;
	for (i = 0; i < N; i++) {
		a[i] = N - i;
	}
	
	printf("Start\n");
	double d = 0;
	for (i = 0; i < N - 1; i++) {
		for (j = i + 1; j < N; j++) {
			if (a[i] > a[j]) {
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
				if (a[i] > 100) {
					double * da = new double[5];
					da[3] = i * 1.0 / j;
					d += da[3];
					delete da;
				}
			}
		}
	}
	printf("Finish\n");
	printf("%f\n", d);
}
работает на моей машинке (на батарейках) 13 секунд приблизительно

код на джаве:

Код:
public class test {

public static void main(String [] args) {
	int N = 10000;
	int a [] = new int[N];
	int i,j;
	for (i = 0; i < N; i++) {
		a[i] = N - i;
	}
	
	System.out.println("Start");
	double d = 0;
	for (i = 0; i < N - 1; i++) {
		for (j = i + 1; j < N; j++) {
			if (a[i] > a[j]) {
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
				if (a[i] > 100) {
					double [] da = new double[5];
					da[3] = i * 1.0 / j;
					d += da[3];
				}
			}
		}
	}
	System.out.println("Finish");
	System.out.println(d);
	
}
}
работает на той же машинке 4 (!!!) секунды.

другой код на с++:

Код:
#include <stdio.h>

void main() {
	int N = 10000;
	int a[10000];
	int da[5];
	int i,j;
	for (i = 0; i < N; i++) {
		a[i] = N - i;
	}
	
	printf("Start\n");
	double d = 0;
	for (i = 0; i < N - 1; i++) {
		for (j = i + 1; j < N; j++) {
			if (a[i] > a[j]) {
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
				if (a[i] > 100) {
					da[3] = i * 1.0 / j;
					d += da[3];
				}
			}
		}
	}
	printf("Finish\n");
	printf("%f\n", d);
}
работает 3 секунды.

си++ компилер майкрософтовский от VS6.0, компилено с опцией O2 (оптимизация по производительности, если я не ошибаюсь), джава - J2SE 1.4.2

как вам результат? ;))

единственное что джавовская версия отъедает во время исполнения 10 мегов оперативки, а сишные обе - менее двух.

дисклаймер: код писался в чукотском стиле, прошу не ударяться в его критику ;)
__________________
митьки никого не хотят победить
KaraNagai вне форума   Ответить с цитированием

Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок
 



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать на сообщения
Вы не можете добавлять вложения
Вы не можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT, времени сейчас: 22:57.


vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd., Русификация: zCarot, Vovan & Co
©2003-2025 VirtualIreland.ru - Виртуальная Ирландия