Stack vs Heap Memory - Simple Explanation

Поділитися
Вставка
  • Опубліковано 28 лис 2024

КОМЕНТАРІ • 292

  • @michaeltheisen
    @michaeltheisen Рік тому +229

    These ideas were saved in my head as a sequence of words for the entirety of my undergrad. If 5 short minutes you managed to actually help me understand a huge gap in my understanding. Thank you so much.

    • @alexhyettdev
      @alexhyettdev  Рік тому +5

      You're welcome Michael, I am glad it helped.

    • @saumyojitdas4212
      @saumyojitdas4212 Рік тому

      ​@@alexhyettdev
      public class Main
      {
      String s = "ABC";
      public static void main(String[] args) {
      Main obj = new Main() ;
      System.out.println(obj.s);
      }
      }
      in this above code String object is created in heap and also of class.
      So 2 objects in heap.
      But isn't the string object Abc resides inside class object in the heap?that's why we are calling it obj.s

    • @rembautimes8808
      @rembautimes8808 9 місяців тому

      Good video very in-depth

    • @crazychase443
      @crazychase443 8 місяців тому

      i feel the exact same way!! this random collection of words and statements now i feel like concrete concepts in my brain

    • @aborda0987
      @aborda0987 3 місяці тому

      @@alexhyettdev Quick question. You mentioned that when a pointer/ref in the stack is deleted, the value it points to dangles around the heap until the GC collects it, but what happens in a language like C++ there is not GC? Would that become a memory leak?

  • @christymathew9035
    @christymathew9035 6 місяців тому +11

    YOU ARE LITERALLY CAPABLE OF REPLACING 99 PERCENT OF TEACHERS WHO PATHETICALLY FAILED TO TEACH ME THIS CONCEPT. THE CLARITY WITH WHICH YOU JUST EXPLAINED IT SHOWS THE TRUE MASTERCLASS YOU ARE IN. I WISH I DINT WASTE MONEY IN COLLEGE WHEN PEOPLE LIKE YOU EXIST. LOVE YOU SIR ❤

  • @luminuslux
    @luminuslux Рік тому +47

    Not gonna lie, i cant state enough how explanations like this can massively improve your understanding of why code works the way it does. Just learning to code is one thing, but understanding whats behind all of it and WHY whatever thing actually is happening, can definitly up your game. Im not a pro by any means, but i think stuff like this is very important.
    The visual presentation also makes it way easier to follow and connect the concepts - so thx for that 😊

    • @alexhyettdev
      @alexhyettdev  Рік тому +3

      Thank you, I am glad you enjoyed the video. I find it helps with remembering everything as well. If you can understand something then it tends to stick in your mind a bit better.

    • @Pratik0917
      @Pratik0917 8 днів тому

      Fab explanation.. Saw many videos however nobody has explained clearer than you..Thank you

  • @Tanessok
    @Tanessok 8 місяців тому +2

    Thank you sir. Good Explanation.
    Please, I wish you make a video on "Why in Java, Do Local Variables Used in Lambdas Have to Be Final or Effectively Final?" and please make the explanations at the memory level too, so we can understand all the mechanics behind it.

  • @JakeeReacher
    @JakeeReacher Рік тому +36

    Alex, you made my day. I would call you one of the best instructors! Your explanations are flawless. You explain perfectly in context. For instance, where you explain why variables are not accessible outside the method.

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      Jake, you made my day! Thank you for the lovely comment. I am glad you found it helpful!

  • @kohltonpeterson3287
    @kohltonpeterson3287 Рік тому +16

    This is one of the best programming related videos I have ever watched. It cleared up so much of my confusion in C++.

  • @scubagoblin
    @scubagoblin Рік тому +6

    Reading a book right now that explains this concept rather poorly over 20 pages. You managed to grant me understanding in 5 minutes, and now I can continue reading past the chapter. Thank you, great explanation!

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      You’re welcome! I am glad I could help you understand it. Hopefully more fun than reading 20 pages of that book.

  • @awys5
    @awys5 4 місяці тому +1

    I've been coding, and teaching code for the past 4 years. This video blew me away. Explained everything so well, and was incredibly easy to follow. Sorry, Alex, I will be stealing this! Amazing work, and you've got a new fan! Thank you!

  • @sonederbr
    @sonederbr 2 роки тому +26

    The best explanation/animation ever.

  • @b25671
    @b25671 3 місяці тому

    I've seen multiple videos of you now... you can explain the essence of things very well. It's a talent. Very good. Thank you!

  • @bitwisedevs469
    @bitwisedevs469 9 місяців тому +4

    Finally a much simpler with actual sample code that explain the whole stack and heap stuff. Now I understand why and when OOM occurs in app, the usual suggestion is to increase heap size but said to be slow or when we do recursion recklessly we get stackoverflow.

  • @0bsy96
    @0bsy96 9 місяців тому +3

    My jaw dropped when you explained what happens to variables declared in the stack, I never made the connection between this fact and the scope of variables, thank you soooo much !!!

    • @nikolabosevski1435
      @nikolabosevski1435 9 місяців тому

      Samee heree, I've never even thought of why we couldn't call variables from different scopes, i just took it for granted this opened my eyes

    • @TheHermitProcess
      @TheHermitProcess 8 місяців тому

      I'd be extremely weary of taking this for fact. It is up to the compiler to generate scoping rules, as far as I know. Look into it a bit more.

  • @RYANCARNEY-dc2qe
    @RYANCARNEY-dc2qe 6 місяців тому +3

    This video actually answered all my questions about how the stack and heap work together. Great explanation!

  • @patrickmccarthy7124
    @patrickmccarthy7124 Рік тому +4

    The analogy of a stack of books provided much needed clarity for me. I appreciate the video mate!

    • @alexhyettdev
      @alexhyettdev  Рік тому

      You’re welcome, I am glad it was helpful.

  • @fuadadio
    @fuadadio 5 місяців тому +2

    Your videos are awesome and very clear.
    Can't wait for a full CS playlist. Thanks for what you do for the community Alex.

  • @AhmedAlsabsab
    @AhmedAlsabsab 6 місяців тому

    Finally I understand the difference in few words and short time... keep doing videos like this

  • @Nicolas-L-F
    @Nicolas-L-F 3 місяці тому +1

    Insanely useful video, didn't think i'd learn that much in just under 6 minutes, thank you.

  • @Saad.Makhdumi
    @Saad.Makhdumi Місяць тому

    Very good explanation, in short amount of time. I hope all IT folks see this video and understand these topics. Thank you Alex.

  • @tylerlwsmith
    @tylerlwsmith Рік тому +6

    Incredible. Even though I've been a professional developer for six years, I was having a crisis of confidence tonight because I've worked with languages where I never have to worry about this directly. I was asking myself, "Do I even know anything about computers if I don't know the difference between the stack and the heap?"
    Five minutes and twenty-seven seconds later, I feel like I have a solid understanding of the difference and I'd be capable of talking about this intelligently. Thank you 🙏

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      I have been a developer for 12 years and I went through exactly the same thought process before making this video. I am really glad it helped you.

    • @___gg421
      @___gg421 Рік тому +1

      Same here just went through a training where some memory management stuff was covered and I felt like an imposter. This made it all make sense

  • @austinhummel5439
    @austinhummel5439 4 місяці тому

    I can't put into words how helpful this video was. Thank you Alex!

  • @brunofilgueiras3518
    @brunofilgueiras3518 5 місяців тому +1

    such a clear explanation couldn't get better thanks Alex

  • @aelesbao
    @aelesbao Рік тому +1

    This video needs to be promoted higher on UA-cam. Anyone who wants to learn Rust should start from here before diving into the borrow checker.

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      Thank you. I am glad it is useful for people learning Rust as well. Some of the C# references might not be applicable but hopefully the rest is. I need to learn rust as well actually!

  • @benessilfie
    @benessilfie Рік тому +5

    This explanation was exactly what I needed! thank you Alex

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      You’re welcome I am glad it helped!

  • @mojizze
    @mojizze 8 місяців тому

    Finally, i now understand the differences between these two. Thank you for the video

  • @orrymr
    @orrymr 2 дні тому

    Wow, absolutely brilliant video. Thank you, sir!

  • @alexsal6069
    @alexsal6069 10 місяців тому +2

    This is an excellent video about how the memory works, I love the last part about asynchronous methods. Thank you for this awesome content. I wish you could speak more about asynchronous functions. 😃

  • @Misteribel
    @Misteribel 9 місяців тому

    3:01 small correction. A const is NOT allocated on the heap. In fact, it's embedded on the call site at compile time (in C#/F#/VB), the reference is removed (you can test this: create a const in another lib, reference and use it in your lib. Compile. Now update the const in the referenced lib and recompile, but do not recompile your lib. You'll see it did not change on the call site). What you probably want is readonly, which, in your example at 3:01, would then be allocated on the heap.

  • @GG-sw9vm
    @GG-sw9vm Рік тому

    that was a clean description of stack and heap. Never knew about anonymous function being a heap, but it makes sense

  • @basedd64
    @basedd64 Рік тому +4

    Perfect, really good explanation. Thank you!

  • @potatopotato4676
    @potatopotato4676 10 місяців тому

    Your explanations are immaculate! You'll definitely make it big if you want to. I am glad I caught your channel early at 18.4k subscribers

    • @alexhyettdev
      @alexhyettdev  10 місяців тому

      I appreciate that! Will be making more videos soon.

  • @agun214
    @agun214 7 місяців тому

    hell yeah. idk how you did it but that finally made sense. i had to have heard the stack of books analogy before, but this is probably the first time seeing it played out with actual books
    imma have to watch this again

  • @Ali_Pxll
    @Ali_Pxll 11 місяців тому

    Man you're a savior
    thanks for the clear explanation

  • @SSn0wx
    @SSn0wx 11 місяців тому

    Great explanation. I do mostly web development, but I've been getting into low-level programming recently, and your video really helped me reach out into my bucket of programming concepts and rearrange a bunch of previous knowledge I had about computers into something more clear and concise. Thanks!

    • @alexhyettdev
      @alexhyettdev  11 місяців тому

      You're welcome, glad I could help!

  • @Soupie62
    @Soupie62 9 місяців тому

    How does garbage collection handle memory fragmentation? Is there a heap defrag utility?
    Do you wipe the heap when a program ends? What is multiple programs / threads run concurrently?
    Now I need to check the rest of your videos for answers.
    Thank you for starting my journey.

  • @csanid1
    @csanid1 9 місяців тому +1

    hey this is an excellent video! i'd never thought or read about the link between variable scope and memory. thank you so much!

  • @balajia.t1487
    @balajia.t1487 9 місяців тому

    A nice and concise explanation . Wishing you all the best for better reach of your subsequent tutorials so a lot from community would benefit

  • @nomymathieu-petrin5672
    @nomymathieu-petrin5672 Рік тому +1

    A hidden gem !!! Thanks you so much, I understand it so much better now !!!!

  • @chocolate_Almonds
    @chocolate_Almonds Рік тому

    Dude, that was awesome. You explained what I tried to wrap my head around in college courses, in 5 minutes. ily :)

  • @johndzikunu9986
    @johndzikunu9986 Рік тому +1

    This is good. Have learned some things I could not know in a year.

    • @alexhyettdev
      @alexhyettdev  Рік тому

      That’s great I am glad you learned something from it. Thank you for commenting.

  • @TonttuTorvinen
    @TonttuTorvinen 4 місяці тому

    Awesome video, very short and to point.

  • @satyabharadwaj7779
    @satyabharadwaj7779 5 місяців тому +1

    Asynchronous methods don't run on different threads. They run on a single thread but with a flexible event loop mechanism

  • @i_am_dumb1070
    @i_am_dumb1070 Рік тому +1

    Thank you very much i was not able to understand this concept even after reading and watching a lot of videos now i have a good understanding of this

    • @alexhyettdev
      @alexhyettdev  Рік тому

      That’s great! I am glad I helped.

    • @i_am_dumb1070
      @i_am_dumb1070 Рік тому

      @@alexhyettdev if possible can you please explain the anonymous function part i didn't get it

  • @rmcgraw7943
    @rmcgraw7943 4 місяці тому

    In C#, async methods that complete sync, before you await them, will not go onto the heap, hence the reason we have ValueTask now. However, if you use a ValueTask struct and it doesn’t complete sync, then you incur a hit of boxing, allocation, and deallocation (GC collect), which makes it a tiny bit more expensive than the regular Task class.
    One more thing. If you cast any value type to an Interface type, it will go onto the heap, even if it’s a struct or value type.

  • @amalekilawlor2922
    @amalekilawlor2922 Рік тому +2

    Wow this was an incredible series of topics, thank you!

  • @Zmey5656
    @Zmey5656 Місяць тому

    Thank you, very simple and useful explanation

  • @timi_t_codes
    @timi_t_codes Рік тому

    Thanks for this simple and straight to the point explanation

  • @EugeneDaveAstator
    @EugeneDaveAstator Рік тому

    Awesome video! Id like to add that in csharp async doesnt always equal multithreading, and since it uses internal statemachine which is a class, asyncs may get allocated on the heap

  • @chitoan77
    @chitoan77 8 місяців тому

    Can you re-check this one? I think something is incorrect with global or static variables.
    We basically have 4 segments: Stack, Heap, Code Segment, and Data Segment.
    Global or static variables, including constants like `const int MAX_AGE = 99`, are not stored on the heap. They are typically stored in the Data segment of the memory, specifically in the initialized data section.
    The Data segment is a part of the memory that contains static and global variables. These variables are allocated and initialized before the program starts executing. The initialized data section of the Data segment holds variables that have explicit initial values, such as the MAX_AGE constant in your example.

  • @mithunkinarullathil643
    @mithunkinarullathil643 2 місяці тому

    Very good explanation, thank you.

  • @may8128
    @may8128 Рік тому +1

    Loved the explanation !

  • @wajdwael8775
    @wajdwael8775 8 місяців тому

    That is a great, clear, and easy explanation, thank you.

  • @Mythical_Beastinator
    @Mythical_Beastinator Рік тому +1

    Very well explained. Thank you!

  • @AdrianTregoning
    @AdrianTregoning Рік тому

    Create more content, you'll be to a million subscribers within a few short years I have no doubt. Your content is pure gold, thank you for explaining this so clearly.

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      Thank you 🤞🏻. Regular content will be back again in September. I have had some family commitments that has put a stopper to my videos this month.

    • @AdrianTregoning
      @AdrianTregoning Рік тому

      @@alexhyettdev fully understand. Good luck! I quit my full time job as a mechanical engineer to become a programmer/coder of sorts. Bit tough being a student at age 41 but for me I made the decision to ultimately spend more time with my family. Have a super day further.

  • @4rjunc
    @4rjunc 3 місяці тому

    straight to the point 💯

  • @obama213
    @obama213 4 місяці тому

    While asynchronous methods can run on different threads, they do not necessarily have to. Aync execution can also involve single-threaded environments. E.g.: with event loops (JavaScript / Python's asyncio)

  • @dorianneto2859
    @dorianneto2859 Рік тому

    Such an intuitive and simple explanation!

  • @MarcoLenzo
    @MarcoLenzo Рік тому

    This video was very good! I really like the way you explain!

  • @vfryhn2
    @vfryhn2 Рік тому +1

    Such a great explanation

  • @kasunsaumya3151
    @kasunsaumya3151 Рік тому

    Simply love your explanations.. Clean and deep..

  • @mehtubbhai9709
    @mehtubbhai9709 10 місяців тому

    @Alex Hyett As always, you give the best explanation of whatever programming topics that you cover.
    Please keep up the great work and keep the content coming. I'm a fan :)

    • @alexhyettdev
      @alexhyettdev  8 місяців тому

      Thank you, I am glad you like them!

  • @khaledmoazedi4317
    @khaledmoazedi4317 Місяць тому

    hey Alex ! it was very great to find your videos on this topic ! so clear and easy . can i grant your permission to translate your videos in persian by my voice and re share them on a channel for persian people to use them?

  • @paulventura3118
    @paulventura3118 Рік тому

    Great explanation! Thanks Alex!

  • @iDeveloper92
    @iDeveloper92 Рік тому

    Excellent breakdown!

  • @Freepackman
    @Freepackman Рік тому

    absolutely brilliant explanation, thanks a lot

  • @jacobL1172
    @jacobL1172 Рік тому

    Learning Redux right now, so very helpful! Definitely subscribing.

  • @milehighgaragespeedshop1065
    @milehighgaragespeedshop1065 Рік тому +1

    Excellent explainer and graphics THX

    • @alexhyettdev
      @alexhyettdev  Рік тому

      You’re welcome, I am glad you like it.

  • @tejassravanthikasulanati4733
    @tejassravanthikasulanati4733 5 місяців тому

    thats lot of info, more than what i was looking for. 👍

  • @Ahmed1Hussein
    @Ahmed1Hussein 11 місяців тому

    you actually help me understand a lot ,thank you sir

  • @PabloDeLafuria
    @PabloDeLafuria 5 місяців тому

    Great video, great explanation! Thanks

  • @miladfahimi4787
    @miladfahimi4787 8 місяців тому

    that was flawless thanks a million man

    • @alexhyettdev
      @alexhyettdev  8 місяців тому

      You're welcome, I am glad you liked it.

  • @gavinmeeker287
    @gavinmeeker287 Рік тому +1

    Really great video! This helped so much

    • @alexhyettdev
      @alexhyettdev  Рік тому

      Thank you I appreciate the kind words. I am glad it was helpful.

  • @alejandropoirier6493
    @alejandropoirier6493 Рік тому

    Amazing explanation, greetings from Chile

  • @vikingghost117
    @vikingghost117 Рік тому

    I haven't coded in over a year. I had a dream where I was traversing a world on some quest to explain stack vs heap to all these people getting it wrong, and I knew they were wrong but didn't know why.
    Soon as I woke up I came here. Now I can sleep at night again. Thanks! 😂
    It was an..(Explain you're a nerd without saying you're a nerd XD)... moment.

    • @alexhyettdev
      @alexhyettdev  Рік тому

      I am glad I can help you sleep at night! 😂

  • @Black_Cats_
    @Black_Cats_ Рік тому +1

    Good video.
    One question: In the case of results from asynchronous methods, once the asynchronous function completes, who cleans up the result in the heap that was left over by the async function?

    • @alexhyettdev
      @alexhyettdev  Рік тому

      Generally they will be cleaned up by the garbage collector in the same way other objects on the heap are.

    • @Black_Cats_
      @Black_Cats_ Рік тому

      @@alexhyettdev thanks for your response

  • @JHatLpool
    @JHatLpool 9 місяців тому

    Very nice explanation. Thanks !

  • @CheckThisOut380
    @CheckThisOut380 Місяць тому

    The fact that static variables are stored on the heap is a bit confusing to me. I saw that within a process there's 4 segments which are: code, data, stack heap ( registers also).
    And then many sources state that static and global variables land in the data segment and not the heap.
    It's most appreciated if you can clarify this point to me (or anyone in the comments), thank you.

  • @rembautimes8808
    @rembautimes8808 9 місяців тому

    Loved the garbage collector animation. Very nice and funny

  • @itsurguy7756
    @itsurguy7756 10 місяців тому

    Hello sir at 3:20 in the video you say that in must run times there is a garbage collector that will clean the memory from the stored memory location after it has finished execution. Not sure if you know but with in C and C++ language we do not have a garbage collector I was told. So in C and C++ we delete pointers manually after block execution. So, Actually C and C++ are not garbage collecting languages.

  • @polimorphic13
    @polimorphic13 8 місяців тому

    Excellent explanation. Thank you so much.

  • @dflosounds
    @dflosounds 10 місяців тому

    Great explanation! Thank you! My only bit of feedback would be to stay on the graphic visualizations longer. The constant switching between the visualizations and the shot of you talking is a bit jarring and makes it harder to focus.

  • @triphazard2906
    @triphazard2906 Рік тому

    lovely explanation, thank you for this

    • @alexhyettdev
      @alexhyettdev  Рік тому

      You’re welcome! I am glad it was useful.

  • @jesusromero9167
    @jesusromero9167 6 місяців тому

    Great explanation!

  • @TheChyamp
    @TheChyamp Рік тому +1

    Aren't static variables stored in the data segment? Not sure if any language stores static variables in the heap?

    • @alexhyettdev
      @alexhyettdev  Рік тому +1

      It seems to depend on the language. For C# they are stored in the heap from what i have read. C and C++ you right it is the data segment.

  • @davidjiang7929
    @davidjiang7929 8 місяців тому

    Thanks for the great explanations!

  • @JanosTech
    @JanosTech Рік тому

    Fantastic explanation, thanks mate!

    • @alexhyettdev
      @alexhyettdev  Рік тому

      You’re welcome! I am glad you liked it.

  • @kwaku_2023
    @kwaku_2023 7 місяців тому

    @4:23 what do you mean by the anonymous function is pushed on top of the stack and not have access to what previous level down? You mean even variables within main?

  • @TejAgarwal
    @TejAgarwal 4 місяці тому

    Really nice explanation but I have one doubt, I used to think that global variables are stored outside of both stack and heap in a dedicated area for global and static variables. Would be great if someone could clarify on that.

  • @kinnetikira
    @kinnetikira 6 місяців тому +1

    The static variables are supposed to be stored in the Data Segment not Stak or Heap. the video mentions that static variables are stored in the heap.

  • @younesmdarhrialaoui643
    @younesmdarhrialaoui643 Рік тому

    Great explanation!

  • @Cruz0e
    @Cruz0e Рік тому

    what does "heap has higher overheads" mean...?
    higher cost?
    I assume (seeing that little 'watch' with pointer at high) that you mean for example it's slower, because it's more complicated for the "machine code" to add to the heap?

    • @alexhyettdev
      @alexhyettdev  Рік тому

      Yes higher overheads as in performance. It is slower to add to the heap compared to the stack.

  • @tibebetech4867
    @tibebetech4867 Рік тому +1

    Thank you!

    • @alexhyettdev
      @alexhyettdev  Рік тому

      You're welcome, I am glad you liked my video.

  • @jamiewalker6296
    @jamiewalker6296 Рік тому +1

    Is this what a memory leak is? If something like c++ that doesn’t have garbage collection or something gets left on the heap is that memory leaks or is that something else?

    • @alexhyettdev
      @alexhyettdev  Рік тому

      Yes exactly, languages like C++ which don't have a garbage collector need the programmer to release the memory correctly. If they don't then memory stays allocated on the heap and can't be accessed by anything causing a memory leak.

  • @gantushigsaruul2489
    @gantushigsaruul2489 9 місяців тому

    Thank you for easy to understand and great video

  • @juliaclaire68
    @juliaclaire68 Рік тому

    thank you! very clear

    • @alexhyettdev
      @alexhyettdev  Рік тому

      You're welcome Julia, thank you for commenting.

  • @shadon_official2510
    @shadon_official2510 8 місяців тому

    this video is gold! wow!

  • @Singlton
    @Singlton 9 місяців тому

    Heap is the same as heap data structure for prioritizing values?

  • @theEtch
    @theEtch 28 днів тому

    thanks for the video. as a new programmer, the books analogy is great and helped me understand , but you could explain what is the meaning of static void Main(string[] args) and why this is relevant to the call stack, or what is a "call" exactly?

    • @theEtch
      @theEtch 28 днів тому

      and I understand this is a java term, but would the same reasoning also apply in Python since it is interpreted and not compiled?

  • @sunnypatel1045
    @sunnypatel1045 Рік тому

    Nice video pal. I love to see a video about boxing and unboxing.

    • @alexhyettdev
      @alexhyettdev  Рік тому

      Thanks! Sure I will add it to my list.

  • @skankhunt__42
    @skankhunt__42 8 днів тому

    3:54 Good Video but in object oriented the static variables dont go into the heap. zero-initialized static data goes in bbs and non-zero-initialized data goes in data

  • @ragtop63
    @ragtop63 9 місяців тому

    Well done! Very good video.