ðŸ’ŧ Memoria RAM: stack y heap

āđāļŠāļĢāđŒ
āļāļąāļ‡
  • āđ€āļœāļĒāđāļžāļĢāđˆāđ€āļĄāļ·āđˆāļ­ 18 āļ.āļĒ. 2024
  • 👌 Si este video te resulta Útil y quisieras dar tu apoyo (ÂĄgracias! âĪïļ):
    ➡ïļ cafecito.app/p...
    o ➡ïļ www.paypal.me/...
    Diferencias entre memoria stack y memoria heap, usando ejemplos en C++.
    Este tema es la base de la implementaciÃģn de punteros en C++ y en muchos otros lenguajes.

āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™ • 36

  • @wanderpaulafernandez8708
    @wanderpaulafernandez8708 2 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™ +2

    Ahora si entendí, por fin!!!!!

  •  5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +21

    Para trabajar con estructuras de datos que involucran punteros es imprescindible conocer las diferencias entre memoria stack y heap. Algunas estructuras que utilizan punteros son las listas enlazadas, los grafos y los ÃĄrboles.

    • @TheTonymontana4
      @TheTonymontana4 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Los vectores tambiÃĐn ya que un vector en realidad a punta a la primera direcciÃģn de la. Partecita que la memoria te reservo para usarla

    •  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Eso es verdad en algunos lenguajes, pero no en todos. En algunos los vectores (arrays) usan aritmÃĐtica de punteros para calcular dÃģnde encontrar determinado elemento (por ejemplo, si cada elemento usa 2 bytes y queremos el tercer elemento, en la posiciÃģn 0 estÃĄ el primero y por ende en la posiciÃģn 4 estÃĄ el tercero).

  • @arielbarrios3915
    @arielbarrios3915 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +4

    Ayer, por casualidad, encontrÃĐ tu canal. ReciÃĐn comienzo en el mundo de la programaciÃģn y tus videos parecen muy interesantes. Gracias por compartir!

  • @alfonsoadalberto8472
    @alfonsoadalberto8472 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +4

    Hace mucho no programÃģ en C pero recuerdo el tema heap y stack lo aprendí mucho mÃĄs complejo.
    Super bien explicado 😁😁😁 mil gracias

  • @FMKARR
    @FMKARR 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Una explicaciÃģn muy clara y bien fundamentada. Muchas gracias

  • @kelinton
    @kelinton 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Esta es la mejor explicaciÃģn sobre el tema. 👌

  • @mentalthink1
    @mentalthink1 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +5

    Super bien explicado, muy bueno el vídeo.

  • @zoserquenaya3193
    @zoserquenaya3193 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    gracias por la paciencia en la explicaciÃģn :)

  • @johnsalvatore6952
    @johnsalvatore6952 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    gracias cÃąora por su conocimiento

  • @Galactic.Fornex
    @Galactic.Fornex 6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +4

    FantÃĄstico, muy claro todo!

  • @luispulido1094
    @luispulido1094 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    muchisimas gracias por este curso estoy viendo golang y hablaban de eso y me harte de no entender esta parte y encontre este video casi no hay nada hablando de esto y me ilumino de como funciona y de una forma super entendible las imagenes me ayudaron muchisimo tambien entenderlo muchisimas gracias desde mexico.

  • @GabrielSurvila
    @GabrielSurvila āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Te quiero muchísimo.

  • @nibblestudios8884
    @nibblestudios8884 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Gran contenido!
    Tu canal es super interesante y profundiza en varios tÃģpicos de C++ que son elementales para cualquier programador.
    Por favor seguí así!

  • @franromero1675
    @franromero1675 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    FantÃĄstica explicacion! Gracias!

  • @jesussalas8582
    @jesussalas8582 6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +3

    Muy buena explicaciÃģn, gracias.

  • @Elagusb
    @Elagusb 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Excelente explicaciÃģn! Me suscribo!
    Gracias!

  • @frandcasas8249
    @frandcasas8249 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    ÂĄMUCHÍSIMAS GRACIAS!

  • @eberchiecher7983
    @eberchiecher7983 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    increible el video, super util.

  • @joseponce6250
    @joseponce6250 6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +3

    muy bueno!!!

  • @kikelot
    @kikelot 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Excelente gracias

  • @armandopenaleonett1258
    @armandopenaleonett1258 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Muchas gracias

  • @itqwerty8188
    @itqwerty8188 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    buenisimo! muchas gracias!

  • @santucigod
    @santucigod 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    3:23 Leía hace unos días en StackOverflow que a menos que se estÃĐ programando ÂŦsofwareÂŧ de base/sistema como controladores, sistemas operativos, ÂŦfirmwareÂŧ, BIOS, entre otros; automÃĄticamente esa memoria es liberada. Los programadores explicaban que liberar la memoria era una especie de cortesía, y en este sentido, yo lo interpreto y comparo un poco con el hecho de colocar ÂŦreturn 0Âŧ al finalizar un programa en C, C++.

    • @rnbois6346
      @rnbois6346 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      lo de return 0 en main, es porque, sin eso, literalmente "int main()" no funciona. Ya que una funcion que no sea void siempre tiene que retornar un valor. No es tanto lo mismo.

    • @santucigod
      @santucigod āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      @@rnbois6346 ÂŦreturn 0Âŧ es el valor que devuelve la funciÃģn principal al programa que gestiona los recursos del sistema operativo, una vez que esta ha finalizado. Mencionas que sin esta instrucciÃģn la funciÃģn ÂŦmainÂŧ no podría ejecutarse, pero los compiladores toman esta ausencia de ÂŦreturn 0Âŧ como una advertencia, mÃĄs que como un error. Al fin de cuentas, la funciÃģn ÂŦmainÂŧ es el principio y el fin de cualquier programa en C y C++, por lo que finalizar la Última instrucciÃģn bastarÃĄ para saber que el programa ha terminado. No obstante, lo correcto sería indicarlo al devolver cero, creería yo.

  • @Sigmasapiens_oficial
    @Sigmasapiens_oficial āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    entonces convendria declarar e como una variable estatica y se ubique en el data segment para evitar que se elimine la variable e una vez que se vacie el stack y asi evitar el memory leak?

    •  āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      DÃģnde se ubicarÃĄ cada variable depende del uso que se le darÃĄ, de quÃĐ tan grande puede ser esa variable, de si es necesario que crezca en tamaÃąo, etc. Porque la stack tiene un espacio limitado y fijo al inicio del programa. Si, por ejemplo, tenemos un arreglo en C++ que podría ocupar tanto 3 bytes como 100MB, entonces serÃĄ mejor que se ubique en la heap (por ejemplo, como vector). TambiÃĐn, si lo que creamos son objetos (con la palabra new), entonces se crearÃĄn indefectiblemente en la heap, no podemos elegir. Muchas cosas se crean en la heap sin que nos demos cuenta y sin que podamos elegir cambiar eso (por ejemplo, una variable std::string o los elementos de un std::vector).

  • @chelendez
    @chelendez 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Excelente video , una consulta las variables de una clase estÃĄn en heap o stack ?, por ejemplo tenga la clase Persona que tenga 2 propiedades como edad y peso, Persona *persona = new Persona(); persona->edad=14; persona->peso=70; siendo edad y peso variables enteras no punteros, en otras palabras cualquier propiedad dentro de una clase no puntera usaría el heap?. Gracias de antemano

  • @frankmdv
    @frankmdv 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Hola. Es excelente tu explicaciÃģn, pero tengo una duda ÂŋLas variables globales primitivas tambiÃĐn se almacenan en la stack?

    •  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Excelente pregunta :)
      En realidad, depende del lenguaje y su implementaciÃģn, pero en varios lenguajes como Java o C++ las variables de tipos primitivos siempre se almacenan en stack, mientras que los objetos pueden almacenarse en stack o en heap. Creo que puede ayudarte este video que hice sobre punteros, porque es un tema íntimamente relacionado a este: th-cam.com/video/s8T7cPnYrz0/w-d-xo.html

  • @Sigmasapiens_oficial
    @Sigmasapiens_oficial 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    _Una pregunta ese stack viene asignado por el tipo de dato?_
    ejemplo:
    *int = 4 bytes*

    •  2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Siempre depende del lenguaje y del compilador que se use, ya que no todos los lenguajes tienen stack y heap, y no todos lo usan de la misma forma. Si hablamos de C++, las variables que se declaran con un identificador van a estar en la stack y las que son creadas con el operador new van a estar en la heap. Por ejemplo, si declaro:
      int mi_variable = 100;
      esta variable estarÃĄ en stack. Incluso si declaro un puntero de esta forma:
      int* mi_puntero = new int(500);
      la variable mi_puntero estarÃĄ en stack mientras que el espacio de memoria apuntado (guardando el valor 500) estarÃĄ en heap.
      Tal vez te sea Útil mi video sobre punteros en C++ para entender mejor la diferencia entre stack y heap: th-cam.com/video/s8T7cPnYrz0/w-d-xo.html

    • @Sigmasapiens_oficial
      @Sigmasapiens_oficial 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @ oie y entonces new int(500) ese valor no tiene un identificador(nombre) en heap por lo que solo se puede acceder a ese valor mediante el puntero y si el puntero estÃĄ en el stack al liberarse la memory stack ocurre un memory leak creo
      y por lo que dices del lenguaje tiene sentido ya que cada uno tiene su documentacion especifica, por ejemplo yo estoy ahorita en basic y el limite de frames en stack es de 5800
      y tengo una ultima pregunta:
      los stackoverflow solo ocurren con los procedimientos recursivos o al utilizar loops tambien podrian ocurrir?
      saludos ✌

    •  2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      ​@@Sigmasapiens_oficial Exacto, si ejecutas la operaciÃģn new int(500); estÃĄs generando una variable en memoria heap que no tiene un identificador. La Única manera de acceder a esa variable sería a travÃĐs de un puntero (este puntero puede estar en stack o en heap, pero el valor 500 definitivamente estarÃĄ en heap). En este ejemplo, al ejecutar new int(500); solo almacenamos un valor en heap y no le dijimos en quÃĐ puntero guardar la direcciÃģn, por lo que ese valor quedarÃĄ inaccesible, sin un puntero para que podamos llegar a ÃĐl (el puntero podría estar en stack o en heap, pero definitivamente necesitaríamos un puntero para acceder). Si se deja un valor almacenado en la heap pero sin ningÚn puntero apuntÃĄndolo, entonces se produce un memory leak porque el espacio de memoria se mantendrÃĄ ocupado pero no podremos acceder.
      Respecto al stack overflow, se produce cuando se llena todo el espacio disponible en memoria stack. La recursividad es un caso prÃĄctico muy comÚn en que sucede esto, pero no necesariamente el Único. Podría ser algo tan simple como crear un arreglo muy grande que no quepa en el espacio designado para la stack.
      Espero haber respondido tus preguntas ☚.