• Viernes 17 de Mayo de 2024, 04:48

Autor Tema:  Organizacion De La Memoria Cuando Se Ejecuta Prog  (Leído 1308 veces)

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Organizacion De La Memoria Cuando Se Ejecuta Prog
« en: Sábado 10 de Junio de 2006, 00:01 »
0
Lo que quiero saber y que no lo encontre buscando en el foro de C es como se organiza la memoria para cada proceso creado. Me refiero al  sector que guarda las variables globales, punteros, espacio para memoria dinamica, variables locales de funciones,etc.

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Organizacion De La Memoria Cuando Se Ejecuta Prog
« Respuesta #1 en: Sábado 10 de Junio de 2006, 00:36 »
0
si me acuerdo bien (sino, que alguien me corrija por favor jeje), desde el punto de vista del programador, la memoria esta dividida en 3 partes:

area del programa: contiene el codigo del cuerpo de las funciones y tambien las variables globales.

stack: las variables locales por ejemplo se guardan en el stack y se borran solas (ej. si dentro de una funcion sumar() declaras un "int a;", esa variable se guardara en el stack y luego al salir de esa funcion, saldra del stack automaticament)..esta parte de la memoria lo controla el sistema, uno nada mas declara las variables, y el sistema se encarga de alocar y dealocar espacio para ellas. Mas precisamente, en el stack se guardan las variables locales no estaticas. Se dice que esta parte de la memoria es eficiente porque es reutilizable (el mismo espacio se usa para distintas variables a lo largo de la ejecucion del programa).

heap: aca el programador es el que se encarga de alocar y dealocar espacio para las variables, si no las borras, quedan ahi volando en el aire y ocupando memoria. Basicamente (ej. de c++), cuando haces un new() o delete(), estas alocando espacio en el heap.

pd. en el caso de los punteros, los punteros en si se guardan en el stack mientras que los valores hacia el cual apunta se guardan en el heap

AnioN

  • Miembro MUY activo
  • ***
  • Mensajes: 339
    • Ver Perfil
Re: Organizacion De La Memoria Cuando Se Ejecuta Prog
« Respuesta #2 en: Sábado 10 de Junio de 2006, 01:27 »
0
se puede ver un mapeo de la memoria?, cuanta memoria se le asigna a cada proceso?, me refieron a que por ej el proceso A usa X cantidad de memoria, hay un limite?

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Organizacion De La Memoria Cuando Se Ejecuta Prog
« Respuesta #3 en: Sábado 10 de Junio de 2006, 01:56 »
0
el limite de estas memorias es dependiente del sistema...cuanto mas memoria tiene la maquina, mas espacio tendras para guardas tus variables..pero es muuuuuuuuuuuuy raro que tu programa necesite mas de lo que hay disponible, y en el caso hipotetico de que pase eso, seguramente el programa muera por si mismo antes de que pudieras hacer algo para salvarlo

honestamente no se si existen aplicaciones para ver el estado actual de la memoria en su totalidad ya que supongo que al menos que sepas como interpretar la informacion que hay en memoria (ram), no te serviria de mucho, pero para el programa que uno esta haciendo, podes usar un debugeador (debugger)...que es basicamente un programita que podes hacer que vaya frenando en cada operacion de tu codigo y te va mostrando el estado actual de tus variables...

Bicholey

  • Moderador
  • ******
  • Mensajes: 1234
    • Ver Perfil
Re: Organizacion De La Memoria Cuando Se Ejecuta Prog
« Respuesta #4 en: Sábado 10 de Junio de 2006, 07:51 »
0
B)  B)
Ademas de eso la memoria tambien tiene que ser reorganizada por el compilador por ejemplo una funcion puede hacer un salto de una direccion 0100h a 0120h y otr funcion hace lo mismo pero obviamente no se puede ocupar el mismo espacio, espero me entiendan enc uanto si hay aplicaciones que pueden exceder la memoria al menos se que mi hermano se topo con complicaciones como esa al programar en turbo C incluso en modo largo, en cuanto a ver si se puede ver como se asigna la memoria un ejemplo de más o menos como se ve esto es en ensamblador por ejemplo db define una variable de 2 bytes como se ve claramente en el PSP y dw una variable de 4 bytes (observar el salto de de 166B:0102 a 166B:106) y una instruccion como mov es de 3 bytes, en C ocurre algo similar , solo que se hace esto de manera transparente y lo trabaja el compilador si más no me equivoco , bueno espero lo puedas comprender mejor con ese ejemplo.


Microsoft® Windows 98
   ©Copyright Microsoft Corp 1981-1999.

H:\WINDOWS\Escritorio>debug
-a cs:100
166B:0100 db '80'
166B:0102 dw '9000'
166B:0106 mov ax,100
166B:0109
[size=109]LOS GATOS SIEMPRE CAEMOS DE PIE !!![/size]