Kezdőoldal » Számítástechnika » Programozás » C vagy Pascal nyelven gyorsabb...

C vagy Pascal nyelven gyorsabbak a tömbműveletek, tömbelemekhez való hozzáférés sebessége?

Figyelt kérdés
Számokból álló tömbökkel műveletek (tömb elemeihez való hozzáférés nagyon sokszor, tömb elemeinek nvöelése-csökkentése, cseréje lehet gyorsabb C nyelven mint Pascal-ban, vagy nem számottevően?

2020. szept. 26. 17:07
1 2 3
 11/30 A kérdező kommentje:

Nagyon köszönöm mindenki hasznos válaszát.

Én már többször is hasonlítottam össze Pascal-ban a statikus és a dinamikus tömb sebességét és meglepődve tapasztaltam, hogy a dinamikus sokkal lassabb. Azt hiszem, statikus tárolás=stack, dinamikus tárolás=heap, hogy sebességgel miképpen függ össze, nem tudom.

Ha a pointerekre gondolnak összehasonlítás terén, úgy gondolom, hogy a dinamikus tömb pointerekből áll - még ha konkrét mutatót nem is használnak - és meglep, hogy e lassabb sebesség képezi az összehasonlítás alapját. Bár ha C nyelven csak dinamikus tömb létezik akkor ez nem is annyira meglepő.

2020. szept. 27. 09:10
 12/30 anonim ***** válasza:

"a dinamikus sokkal lassabb"

A memóriafoglalás szokott lassabb lenni (bár ez malloc implementációtól függ, Gugli: malloc implementations). A memória elérésében nem szabadna nagy különbségnek lenni, a dinamikus tömb címe szimpla cím, a stack-en pedig a stack-pointerhez képesti relatív cím, de az minimális műveleti időt jelent.


"a dinamikus tömb pointerekből áll"

Abból áll, amivel feltöltöd. Ha pointerekkel töltöd fel, abból áll, ha int-ekkel, akkor abból, stb. Ez igaz a heap-en, stack-en, mindenhol.


"ha C nyelven csak dinamikus tömb létezik"

Nem csak az létezik.

2020. szept. 27. 13:51
Hasznos számodra ez a válasz?
 13/30 A kérdező kommentje:

Köszönöm a választ.

Dinamikus tömb esetén a tömb elérésében mutatkozik jelentős eltérés.

2020. szept. 27. 14:09
 14/30 anonim ***** válasza:
Ehhez a két forráskódot és a konkrét fordítókat kellene megnézni. C és Pascal fordítóból is többféle van.
2020. szept. 27. 14:24
Hasznos számodra ez a válasz?
 15/30 anonim ***** válasza:
Még egy tipp: ha a fordító például tömbindex ellenőrzést is beépít a lefordított kódba, az jelentősen lassítja az elérést. C-ben ezt fordító paraméterezéssel lehet kikapcsolni (ha jól emlékszem), Pascalban a forráskódban lehet ki-be kapcsolni fordítói direktívákkal, akár a kód egyes részeire külön-külön is. Ezt a range checkinget kapcsold ki, és úgy nézd meg a sebességet.
2020. szept. 27. 21:17
Hasznos számodra ez a válasz?
 16/30 anonim ***** válasza:

..Bár alap esetben a Free Pascal elvileg nem generál range checking kódot.

[link]

2020. szept. 28. 13:27
Hasznos számodra ez a válasz?
 17/30 A kérdező kommentje:

Legújabb fpc fordítónál is gyorsabb a statikus tömb elérése mint a dinamikus.

Az alábbi nyakatekert kódot sikerült alkotni (valószínűleg rövidebbel is ment volna a demonstráció):

[link]

2020. szept. 28. 14:25
 18/30 A kérdező kommentje:

Jaa és azért "longint" típusú a tömb, mert az gyorsabb, mintha byte típusú lenne.

A kódért meg elnézést.

2020. szept. 28. 14:26
 19/30 anonim ***** válasza:

Több doloog is van, amit nem jól csinálsz.


Amúgy, igen, a statikus tömb elérése mindig is gyorsabb lesz a dinamikusnál.

A freepascal fordítója egy remek, nagyon sokoldalú fordító de éppen a sebességben nem jeleskedik.

2020. szept. 28. 15:12
Hasznos számodra ez a válasz?
 20/30 anonim ***** válasza:
Ja hogy dinamikusan kezelt tömb. Én úgy értettem, hogy a dinamikusan foglalt sima tömbről van szó.
2020. szept. 28. 15:30
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!