Показать сообщение отдельно
Старый 29.03.2009, 15:03   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Создание динамического массива объектов класса

сишнег знаю выше уровня нуба
везет тебе. я тоже хочу знать выше уровня нуба.

Это:
#include <iostream>
#include <conio.h>
#include <windows.h>

int main()
{
		
	__int64 l,fq;
	__int64 t1=0,t2=0;
	__int64 r1=0,r2=0;

	QueryPerformanceFrequency((LARGE_INTEGER*)&fq);

	const int cnt = 250000;
	const int tests = 100;

	int stack_array[cnt]; //массив в стеке
	int *heap_array = new int[cnt]; //массив в куче (через указатели)

	for(int t=0;t<tests;++t)
	{
		// первый тест
		QueryPerformanceCounter((LARGE_INTEGER*)&t1);
		for(int i=0;i<cnt-1;++i)
		{
			stack_array[i]=stack_array[i+1]+2;
		}
		QueryPerformanceCounter((LARGE_INTEGER*)&l);
		r1 += (l-t1);

		// второй тест
		QueryPerformanceCounter((LARGE_INTEGER*)&t2);
		for(int i=0;i<cnt-1;++i)
		{
			heap_array[i]=heap_array[i+1]+2;
		}
		QueryPerformanceCounter((LARGE_INTEGER*)&l);
		r2 += (l-t2);
	}

	std::cout<<"stack array time = "<<(float)r1/(float)fq<<" sec."<<std::endl;
	std::cout<<"heap array time = "<<(float)r2/(float)fq<<" sec."<<std::endl;

	_getch();
	return 0;
}
на моей машине дает такие результаты:
0.0260
0.0272
т.е.да, на стеке массивы быстрее. совсем чуть-чуть но быстрее. но их размеры нельзя менять (более того, их размеры должны быть определены на стадии компиляции). + это значение сильно ограниченно. так, например массив в 300000 элементов уже не создается.
Вложения
Тип файла: zip StackArravVsHeapArray.zip (6.2 Кб, 726 просмотров)

Последний раз редактировалось HolyDel, 29.03.2009 в 15:13.
(Offline)
 
Ответить с цитированием