În data de 23 martie 2015, 09:59, Vlad Dogaru via so <so@cursuri.cs.pub.ro>
a scris:

> On Mon, Mar 23, 2015 at 07:36:32AM +0000, Sebastian ENE via so wrote:
> > Salut,
> >
> > Am si eu o intrebare daca puteti sa ma lamuriti va rog :
> >
> > Pe Linux intr-un process copil aloc memorie inainte de a executa execv().
> > Dupa ce am executat execv() toata memoria procesului copil se suprascrie
> > (asta inclusive heap-ul in urma alocarilor cu malloc, calloc..)
> > 1.Apelul free() dupa execv() nu mai are sens deoarece s-a suprascris
> > intreaga zona de memorie nu?
>
> După un execv() cu succes nu se mai execută nimic din codul de după.
> Deci dacă pui free() după nu are sens, pentru că nu se ajunge la el.
>
> Are sens să apelezi free dacă execv() eșuează, dar nu cred că asta
> întrebai.
>
> > 2.File descriptorii deschisi inainte de execv() se pierd, dar
> > structurile aferente procesului care fac legatura cu inode-urile
> > raman?
>
> File descriptorii nu se pierd decât dacă au flag-ul close on exec [1].
> Ceilalți rămân.  This makes sense if you think about it, poți moșteni,
> at the very least, stdin, stdout și stderr, ca să nu te trezești că ai
> executat un program redirectat într-un fișier și apoi el face exec()
> altuia care începe să scrie la consolă.
>
> [1]
> http://stackoverflow.com/questions/6125068/what-does-the-fd-cloexec-fcntl-flag-do
>
> > 3.Pe Windows trebuie sa dealocam memoria pentru parametrii in linie de
> > comanda trimisi catre CreateProcess() din procesul parinte pentru a
> > evita memory leak-uri ?
>
Asta nu știu.
>
Poti sa incerci sa rulezi cu DrMemory pe Windows sa vezi ce zice:
http://www.drmemory.org/  (free and open source).

Andrei

>
> Vlad
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui