[FreeBSD] memoria - regi gimp-gond
Miklos Niedermayer
mico at bsd.hu
2001. Jan. 18., Cs, 19:43:38 CET
Hello!
( > Nohl Attila Rajmund)
> > string string1, string2; string1="hello" ; string2="world!" aztan
> > cout << string1+string2, majd csinald meg u.ezt c-ben, strcpy-vel.
> ~~~~~~
> Es itt a buffer overrun... Persze lehet strncpy-vel jatszani, meg elore
> megnezni a string hosszat, aztan az alapjan lefoglalni az uj stringet,
> de ezek utan pont ott vagy, mintha a C++ string osztalyat hasznaltad
> volna (kb. ugyanannyi muvelet), csak neked kell helybe megirnod, ami
> tobb idobe telik, olvashatatlanna teszi a kodot, es ha elbaltazod, akkor
> meg meg is kell keresni a hibat.
Szívemből szóltál! Nézzük már meg a security hole-okat mostanában, hát
nem kis százalékuk buffer overflow-jellegű. De nem csak securityről van
szó: ha egyszerűen ott van egy hiba, az már baj. Operator overloadinggal
könnyedén elkészítheted C++-ban a saját operátoridat, csak egy példa:
mytype x,y; //"mytype" legyen mondjuk egy diszkrimináns
És szépen elkészíted a megfelelő rutinokat, hogy a típusod "transzparens"
módon végezze el a saját értékének meghatározását, stb.
Vagy pl mondhatsz ilyet:
x=y*6;
Ami az y diszkriminánst adja át x-nek, hattal megszorozva. Egyszerűen
annyit jelent, hogy csináltál hozzá egy "*" operátort. Nekem a C++ ezen
tulajdonsága a kedvencem.
Visszatérve a stringhez, hasonló módon elkészítheti az ember a saját
string rutinjait is, úgy, hogy gyakorlatilag ne fordulhasson elő buffer
overrun (ez persze bizonyos körülmények fennállását igényli, pl. hogy
lehetőleg minden a string típust használja, vagy legfeljebb olvasni
akarjon char*-ból, de írni ne).
Nem igazán vettem még észre, hogy a C++ lassabb lenne, mint mondjuk egy
normál C alkalmazás. ASM-mel nem tudom viszonyítani, mert egyszerűen
senki nincs, aki megírná ASM-ben ugyanazt, mint C++-ban. Ha pl.
adatbáziskezeléshez, egyfajta frontendnek használom, akkor meg úgyis az
adatbázisszerver fogja meghatározni a teljesítményt, viszont el sem lehet
mondani, mekkora kényelmet és biztonságot jelent az, hogy az ember a saját
ökör adatstruktúráihoz operátorokat csinálhat és tök emberi módon bánhat
velük.
--
______ o _. __
/ / / (_(_(__(_) @ bsd.hu
További információk a(z) BSD levelezőlistáról