Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames...

19
Septiembre 28, Jueves

Transcript of Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames...

Page 1: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Septiembre28,Jueves

Page 2: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Agendaparaestaclase�  StackFrames� Heap

�  Reservadinámicadememoriadesdeelstack�  Reservadinámicadememoriadesdeelheap� Operadornew� Operadordelete� DiferenciasentreHeapyStack

� EstructurasEnlazadas&Nodos� Nodo�  Recorridodelistaenlazada

Prof. Esp. Ing. José María Sola 279

Page 3: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Invocacionesafunciones

Page 4: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

�  LosStackFrames(activationrecords)sonloselementosdelaCallStack(PiladeInvocaciones)

�  Cadastackframesecorrespondealainvocacióndeunafunciónquetodavíanofinalizó

�  Eneltopestálafunciónqueseestáejecutando�  Elcontenidoesdependientedelaplataforma,peroen

general,unstackframemantiene:�  Variableslocalesoautomáticas�  Argumentos�  Direcciónderetornoparacontinuarlaejecución

�  Cadainvocaciónafunciónagrega,i.e.Push,unnuevoStackFrame(ActivationRecord)

�  Cadaretornodefunciónsaca,i.e.Pop,unstackframe,dejandoelvalorderetornodisponible

�  ElStackPointer(SP)apuntaalacima,Top,delapila.�  ¿Quéeselstackoverflow?�  ¿Esposibleretornarunpunteroaunavariablelocal?.

StackFrame(Ac3va3onRecord)CuadrodePila(RegistrodeAc3vación)

Prof. Esp. Ing. José María Sola 281

Bottom Stack

Top SP

Page 5: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Ejercicio–CallStack:Basadoenhoja6deMemoryManagementinC

� Dadoelcallstack1.  main2.  foo3.  bar

�  ¿Cuántosstackframeshay?�  ¿Cuálfunciónllamóacuál?� Dibujeundigrafoquerepresenteelcallstackylasrelación"invocó-a"

�  ¿Cuántasfuncioneshayenejecución?�  ¿Cuáleslainvocaciónactiva?� Diagrameycodifiqueunprogramaquesecorrespondaaestecallstack.

Prof. Esp. Ing. José María Sola 282

Page 6: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Reservadinámicadememoriaconlosoperadoresnew&delete

Prof. Esp. Ing. José María Sola 283

Page 7: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Reserva,AnalogíaconRestarurant�  Llamadoparahacerunareserva

�  ¿Quésepide?¿Nombre?¿Cantidad?�  ¿Quéseregistra?�  ¿Quéseretorna?�  new

�  Llamadoparacancelarreserva�  delete

�  DiferenciasconStack�  Duración�  Nombre�  Liberación�  GarbageCollector

Prof. Esp. Ing. José María Sola 284

Page 8: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Prof. Esp. Ing. José María Sola 285

Page 9: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

�  Repaso:EstructuraEstáticaversusDináminca�  Stack,Queue,Array

�  EstructuraEnlazada�  Stack,Queue,LinkedList

�  Problemasqueresuelven�  VentajasyDesventajas

IntroducciónaEstructuraEnlazada

Prof. Esp. Ing. José María Sola 286

Page 10: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

�  Otrosnombresparadata�  car�  datos�  entry,entrada�  payload,carga�  info,información�  val,value,valor

� Otrosnombresparalink�  cdr�  enlace�  next,siguiente,próximo�  nxt,sgte

¿QuéesunNodo?node=(data,link)

Prof. Esp. Ing. José María Sola 287

Page 11: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

RepresentacionesdeNodos

Prof. Esp. Ing. José María Sola 288

// Node of int struct Node{ int value; Node *next;

};

// Node of Type struct Node{ Type value; Node *next;

};

// Template Node struct Node<T>{ T value; Node<T> *next;

};

Page 12: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Node first_node; first_node.value = 'a'; Node *p0 = &first_node; Node *p1 = new Node; (*p1).value = 'b'; p1->value = 'b'; p0->next = p1; Node *p2 = new Node; p2->value = 'c'; p2->next = p0; p1->next = p2; // Recorrido Node *p=p0; // actual do{ cout << p->value; p=p->next; }while( p != p0);

Ejemplo:TresNodosEnlazados

Prof. Esp. Ing. José María Sola 289

Page 13: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Recorrerlalistaenlazada

Prof. Esp. Ing. José María Sola 290

Node *first = …; Node *p; for(p=first; p!=nullptr; p=p->next) cout << p->value;

Page 14: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Ejercicio–DibujeeldiagramaparaelsiguientecódigoC++Node *p0 = new Node; po->value ='0'; Node *p1 = p0->next = new Node; p1->value ='1'; Node *p2 = p1->next = new Node; p2->value ='2'; p2->next = p1;

Prof. Esp. Ing. José María Sola 291

Page 15: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Ejercicios–Escribalassentencias

Prof. Esp. Ing. José María Sola 292

Page 16: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Términosdelaclase#DefinircadatérminoconlabibliograVa�  SeccionesdeMemoria

�  Parteestática�  DatosestáticosóPilaEstática�  CódigoóTexto�  Partedinámica�  Stack(Pila)

�  CallStack�  CallStack�  Variablesautomáticas�  Argumentos�  IP�  StackFrame(Activation

Record)

�  Stackpointer�  Diagramadecallstackylas

relación"invocó-a"�  Invocaciónactiva�  Push�  Pop

�  Heap(Montículo)�  Puntero�  Declaracióndepuntero�  Operador*�  Operador&�  Operadornew�  Operadordelete

21

Prof. Esp. Ing. José María Sola 293

Page 17: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack

Tareasparalapróximaclase1.  ImplementarversionesenlazadasdeStackyQueue,

condeclaracionesydefinicionesenarchivosseparados

2.  Leerhttp://josemariasola.wordpress.com/aed/papers#StringPackerAndBlockStream

Prof. Esp. Ing. José María Sola 294

Page 18: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack
Page 19: Septiembre 28, Jueves - josemariasola.github.io 2017 K1051 Clase #21.pdf · Los Stack Frames (activation records) son los elementos de la Call Stack (Pila de Invocaciones) Cada stack