[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