Î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