De van valami nem tiszta neked, mondd, és talán tudom rá a választ.
Az érdekelne, hogy a kivételkezelés milyen elemi szerkezetekre bomlik fel fordítás alatt. Ahhoz most nincs kedvem, hogy nekiálljak disasm listákat elemezni. :P
Ez nem nyelvfüggő. Ha az a feladatod, hogy olyan programot írj, ami lekezeli az out of memory-t rendesen, akkor C-ben egy irgalmatlan nagy katyvasz lesz belőle. Minden malloc() visszatérési értéke ellenőrizve lesz, a resource-ok deallokálását kézzel kell végezni az összes esetben. Tele lesz rakat if-fel a kód. És goto-val is, ha a linux kerneles megoldást választod, ami egyébként valszeg a legjobb megoldás erre a problémára. A C++ kódon pedig kb. meg se fog látszani, hogy ilyet is tud, mert automatán működni fog. Meglehetősen nagy a különbség.
Pontosan ezt szoktam csinálni, minden malloc()
-ot ellenőrzök és ha elhasalt, deallokálok, lezárok, kiszállok. A mechanizmus bonyolultságán azt értettem, hogy a C++-os OOP mögött jóval több húzódik meg a háttérben, pl. a konstruktornál, mint egy-egy malloc()
, tehát C-ben kevesebb dolgot kell lekezelni, felszabadítani, stb. Csak a C++ a sajátját automatice csinálja, C-ben meg kézzel kell.
A hordozhatóságon kívül bármiben?
Azért a teljesítményt és a binárisok méretét se felejtsük el. Tudom, van amikor a C++ gyorsabb és/vagy kisebb lesz. Kivétel erősíti a szabályt.
Remélem nem mondok magamnak akkor ellent, hogy ezzel a megállapítással nem értek egyet.
Annak nem mondtál ellent, amit a múltkor mondtál, mert akkor is ezt mondtad - és hosszas vita után meg is győztél - de a mondatod elejének a végével ellentmondtál, mert én elmondtam azt, amiről a múltkor meggyőztél, te meg mondod, hogy nem értesz egyet és utána elmondod ugyanazt, hogy assemblyben gyorsabb kódot lehet írni, mint C-ben, de nem az átlagos kódernek. Hát én ugyanezt mondtam. :)
BTW, a példának, amit adtál, mi lenne az optimális megoldása? Én ezt hoztam össze, így csak kétharmad annyi az assembly kód és elágazás sincs benne, viszont így mindenképpen 4 db memóriahozzáférés van, nem 2 vagy 4, mint ha logikai éssel kapcsolom őket össze.