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
 1/30 anonim ***** válasza:
8%
pascalt már elkellene felejteni!
2020. szept. 26. 17:08
Hasznos számodra ez a válasz?
 2/30 anonim ***** válasza:
Pointeres megvalósítással ugyanaz.
2020. szept. 26. 17:17
Hasznos számodra ez a válasz?
 3/30 A kérdező kommentje:

Statikus megvalósításra gondoltam, mert dinamikus tömb esetén jóval lassabb Pascal-ban a hozzáférés.

Bár a C - tudomásom szerint - minden tömböt dinamikusan kezel elvileg.

2020. szept. 26. 17:24
 4/30 anonim ***** válasza:
100%

#1: Dehogy kellene.

Azt leszámítva, hogy divat lett szidni, semmivel nem rosszabb, mint az agyonhype-olt nyelvek.

Egyébként pedig nem igazán a nyelvtől, hanem implementációtól, a konkrét fordítótól, és a fordítási beállításoktól függ, hogy melyikben mi mennyire gyors. De hacsak nem valami übernagy adathalmazt kell kezelned, vagy ha nem kell brutális mennyiségű műveletet elvégezned, akkor igazából jelentéktelenek a különbségek.

2020. szept. 26. 17:25
Hasznos számodra ez a válasz?
 5/30 A kérdező kommentje:

Mennyire optimalizálja ki a kódot, igen, engem is ez foglalkoztat, tehát hogy ha rengeteg elemen kell műveleteket végezni akkor jelentős eltérés lehet -e.

Gyakran írják a C bináris kódról, hogy "majdnem olyan gyorsak mintha assembler-ben írták volna".

2020. szept. 26. 17:33
 6/30 anonim ***** válasza:
46%

Nem statikus, vagy dinamikius tömbre fgondoltam, hanem a tömbelemek elérésére. Ha az pointeres, akkor a C-vel egyenértékű, sebesség szempontjából.

A C valóban majdnem olyan gyors mintha assemblyben írták volna, már csak azért is, mert a C kimenete nem más mint assembly.

Ahogy a 4. válaszoló is írja, a sebesség a fordítótól függ elsősorban, nem a nyelvtől.

A borland pascal (delphi 5+) fordítói 100 % assemblyben lettek lefejlesztve, a fejlesztők nagyon tudták, hogy mit csinálnak, így a generált kód is általában elég gyors lett. A dos meg eleve úgy volt shit ahogy volt.

A C fordítók esetében is az volt a jellemző, hogy írtak egy transpilert, ami a c forrásból asm outputot generált, amit aztán valamilyen jobb féle assemblerrel fordítottak binárisra. Lehetőleg olyan assemblerrel, amely még optimalizálni is jól tudott.

Ma már az előfeldolgozó, az optimizer és a fordító általában együtt van.


A standard c és a pascal forrásból fordított bináris között a c javára talán ha 5 % előny van maximum, már ha egyáltalán van, adott esetben, kellően hosszú, összetett kód esetén.

2020. szept. 26. 18:38
Hasznos számodra ez a válasz?
 7/30 anonim ***** válasza:

"A C valóban majdnem olyan gyors mintha assemblyben írták volna, már csak azért is, mert a C kimenete nem más mint assembly."


Teljesen jogos, de azért hozzátenném, hogy ugyanazt a műveletsort le lehet fordítani pl. 5 és 35 assembly utasítássá is, akár nagyságrendi órajelciklus igény különbséggel. Láttam már olyan fordító összehasonlító tesztet, ahol hasonló különbségek voltak az asm kimenetben, ugyanabból a C kódból kiindulva.


Amúgy a Pascal fordítók régen is elég tömör, gyors kóddá fordítottak. (Nem tudom, azóta változott-e, de nem hiszem.) Ilyen szempontból komoly versenytársa volt a C-nek, és még kicsit a szintaktikája is átláthatóbb volt. Talán marketing oka lehetett, hogy az Object Pascalnak a rengeteg lib-bel együtt sem sikerült annyira elterjednie, mint a C/C++-nak.

2020. szept. 26. 20:24
Hasznos számodra ez a válasz?
 8/30 anonim ***** válasza:

"Teljesen jogos, de azért hozzátenném, hogy ugyanazt a műveletsort le lehet fordítani pl. 5 és 35 assembly utasítássá is, akár nagyságrendi órajelciklus igény különbséggel."


Igen, ez így van.

Itt kap szerepet a tárgyi tudás, a tapasztalat, az affinitás, a kisérletező kedv, na meg persze a ráfordított idő. Ettől lesz egyik compiler jobb, rugalmasabb, értékesebb a másiknál.

És hát, igen, silány kódot lehet fejleszteni assemblyben is.


Sajnos az Object Pascal háttérbe szorulása leginkább arra vezethető vissza, hogy akivel a Microsoft összerugja a port, attól a piac igyekszik mihamarabb eltávolodni. Így történt ez az amúgy remek Gravis kártyák gyártójával és ennek okán zuhant meg a Borland is. Bár tény, a Borland bukásába a saját töketlenkedése is vastagon belejátszott (hülye névváltoztatás, termékvonal kisiklatása, kylix, turbo delphi, BSA tagság, stb).

Na meg, a C/C++ fordítók területén volt verseny, Object Pascal vonalon meg gyakorlatilag monopolhelyzetben volt a Borland, holott, nagyon jót tett volna nekik legalább egy darab konkurrens.

2020. szept. 26. 22:11
Hasznos számodra ez a válasz?
 9/30 anonim ***** válasza:

Igen, köszönöm, én is erre tippeltem, hogy piaci okai lehettek. A lényeg, hogy nem igazán technikai okai voltak.

A főkérdésre: A tömbműveleteket a procik utasításkészlete is támogatja, már régóta létezik indexelt címzési mód, hardveres címszámítással, úgyhogy ha megfelelő asm kódra fordítódik első körben, akkor nem szabadna nagy különbségnek lennie. Általánosságban egy a[cím] tömbelem elérése: a + (cím * elemméret).


"Free Pascal treats pointers much the same way as C does. This means that a pointer to some type can be treated as being an array of this type."

"Free Pascal supports pointer arithmetic as C does."

[link]

2020. szept. 26. 22:22
Hasznos számodra ez a válasz?
 10/30 anonim ***** válasza:

** "a[cím] tömbelem elérése: a + (cím * elemméret)"

Bocs, inkább index, mint cím:

a[index] --> a + (index * elemméret)

2020. szept. 26. 22:24
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!