Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

resize array

Ostatnio zmodyfikowano 2013-04-27 01:11
Autor Wiadomość
pekfos
» 2013-04-26 17:21:04
Podaj jeszcze te wyniki. U mnie np ten program się wysypuje (0xC00000FD mówi samo za siebie) ;)

C/C++
vector < Test > vTest1;
for( i = 0; i < 1000000; ++i ) vTest1.push_back( Test( i ) );
Ha ha ha.
P-81203
akwes
» 2013-04-26 17:24:55
Ja się nie denerwuje :) I dalej nie widzę co jest w nich magicznego. Bo dalej nie widzę przewagi nad std::vector.


SetLength(MojaTablica,high(MojaTablica)+2);
MojaTablica[high(MojaTablica)] := ElementDoDodania;
Przecież taki sposób dodawania elementu na koniec woła o pomstę do nieba...
P-81206
Elaine
» 2013-04-26 17:34:37
Ciekawy benchmark.

Czasy tworzenia:
0
0
0
0


Czasy dostepu:
0
0
0
0
P-81209
crash
» 2013-04-26 17:49:45
Ja też bardziej lubię C++ niż Pascala, nic do dodania bo to nie ma sensu żadnego ;p Co do programu, pod Ubuntu 11.04 działa, na chwilę obecną nie mam windy. GetTickCount powinno pomóc (windows.h)

http://i.imgur.com/UJIbUAq.png

P-81210
akwes
» 2013-04-26 18:06:55
Nie ma co dyskutować, nad wynikami skoro cały test jest zły. Same wyniki są z duszy wzięte i to na oko widać. Chociażby zobacz co napisał Ci pekfos.
C/C++
//usual static array
Start( s[ 0 ] );
Test T[ 1000000 ];
Stop( s[ 0 ] );

//dynamic arr
Start( s[ 1 ] );
Test * TT = new Test[ 1000000 ];
Stop( s[ 1 ] );

//vector, creating at push_back
Start( s[ 2 ] );
vector < Test > vTest1;

for( i = 0; i < 1000000; ++i ) vTest1.push_back( Test( i ) );

Stop( s[ 2 ] );
Jeżeli zapisy z tych trzech "testów" mają być równoznaczne, to
Po pierwsze:
C/C++
vTest1.resize( 1000000 );
a po drugie jeszcze lepiej:
C/C++
vector < Test > vTest1( 1000000 );

Dalej już nawet nie sprawdzałem.
P-81212
ison
» 2013-04-26 19:35:25
podobny benchmark pisałem niedawno
Pytania o zadania z OIG (2 strona)
P-81232
akwes
» 2013-04-26 19:47:15
@ison, Alueril Ci tam odpisał dowód, który pokazuje pewną rzecz.

Kod std::vectora najwyraźniej daje więcej możliwości kompilatorowi do optymalizacji.

Napisałem sobie własny mały test i przy wyłączonej optymalizacji tablica dynamiczna jest szybsza od std::vector, ale przy włączonej optymalizacji to std::vector ma lepsze wyniki. Czyli wszystko będzie zależne od kontekstu w jakim jest wywołany test i czy kompilatorowi uda się coś zoptymalizować.

Zresztą, temat zaczął się od tablicy w Delphi i o tym, że w C++ trzeba kombinować. Nie wiem czemu sprawdzamy szybkość rzeczy z C++...
P-81234
ison
» 2013-04-26 21:42:38
@akwes tak, czytałem. Aczkolwiek to i tak zależy od implementacji kompilatora, a bezpieczniej jest zazwyczaj użyć zwykłej tablicy jeśli kładzie się duży nacisk na wydajność. Przykładowo na OI'owym kompilatorze (tym co był rok temu, teraz nie sprawdzałem) iterowanie po wektorze jest znacznie wolniejsze.
P-81239
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona