11.07.2015 Views

versión color - PET: Python Entre Todos - Python Argentina

versión color - PET: Python Entre Todos - Python Argentina

versión color - PET: Python Entre Todos - Python Argentina

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Fragmentación 83espacio libre, pero es inusable para objetos grandes, puesto que, a diferencia de unarchivo que puede ser dividido en fragmentos en el disco, la memoria de un objetonecesita ser contigua.Así que, a diferencia de la fragmentación en un sistema de archivos, la fragmentaciónde memoria hace inusable a la memoria. Si quisiera crear un objeto grande, digamosde unos megabytes, debería utilizar el espacio que está hacia el final del mapa (o seaextender la imagen virtual del proceso). Esto efectivamente hace malloc cuando seencuentra con esta situación.El efecto inmediatamente visible es un uso ineficiente de la memoria disponible. Si miprograma necesita 2GB de memoria en teoría, podría estar pidiéndole 4GB al sistemaoperativo (porque tiene muchos pedacitos reservados que no puede utilizar). Si tengomucha mala suerte, esto podría hacer que mi sistema swapee. Si tengo más malasuerte, thrashea, y se muere.Veamos un ejemplo de código que fragmenta la memoria:>>> l = []>>> for i in xrange(1,100):... ll = [ " " * i * 16 for j in xrange(1000000 / i) ]... ll = ll[::2]... l.extend(ll)... print sum(map(len,l))...800000016000000…792005616>>>Luego de esto, top nos dice:10467 claudiof 20 0 1676m 1.6g 1864 S 0 82.7 1:17.07 pythonO sea, aunque según los cálculos el programa tenía que consumir 800M de memoria,efectivamente consume 1.6G. El doble.¿Por qué es esto?Bueno, porque el ejemplo lo pensé específicamente para que cree un 50% de huecosinutilizables. La memoria está fragmentada, pues, en un 50%.{footer} — http://revista.python.org.ar

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!