美文网首页技术文章推荐程序员技术栈
编程基础 之 Stack和Heap的区别

编程基础 之 Stack和Heap的区别

作者: V哥的博客 | 来源:发表于2019-03-10 04:23 被阅读0次

Stack和Heap在哪儿

都在RAM,即都在内存中存放

Stack

在一个函数被调用时候,在stack会保留一块以用来保存local variables。函数返回时,这块stack成为Unuse的状态,提供给下一个函数的使用。

function func(){
  int i = 1; // Allocated on stack
} // De-allocated from stack

function func1(){
  int j = 2; // Allocated on stack
}// De-allocated from stack


void main(){
  func();
  func1();
}

Heap

Heap的分配和释放比较自由,可以随时分配,并且随时释放。

new 和 malloc创建的东西将会存放到Heap中,属于dynamic allocation

function func(){
  int i = 1; // Allocated on stack
  Char* buffer = new Char[20]; // Allocated on heap
  doSomething;
  deallocated buffer; //deallocated from heap
  doSomethingElse;
}//deallocated from stack

Thread中的Stack和Heap的关系

每个thread都有自己的Stack,同一process下的Threads之间共享一个Heap。

通常 一个application只有一个Heap

例子

Stack和Heap的分配

int i = 1; // Allocated on stack
Char* string = "Vigor"; //Allocated on stack
Char* buffer = new Char[20]; // Allocated on heap

int foo()
{
  char * pBuffer;
  //<--nothing allocated yet (excluding the pointer itself, which is allocated here on the stack).
  bool b = true;
  // Allocated on the stack.
  if(b)
  {
    //Create 500 bytes on the stack
    char buffer[500];

    //Create 500 bytes on the heap
    pBuffer = new char[500];

   }
   //<-- buffer is deallocated here, pBuffer is not
} //<--- oops there's a memory leak, I should have called delete[] pBuffer;

使用Stack和Heap时常见的问题

Stack的分配和释放是受到Compiler的控制,同时,Heap的分配和释放是受到Developer的控制(C和C++),所以说Heap的问题出现的会比Stack的问题多

分配时的问题

  • 没有分配heap
  • 分配不足的heap

释放时的问题

  • 忘记释放Heap
  • 释放多次Heap
  • 过早释放Heap,即,在没有完任务就释放Heap

Java中,受到GC控制释放,一般不会遇到Heap的问题

Reference

https://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap


想要看到更多玮哥的学习笔记、考试复习资料、面试准备资料?想要看到IBM工作时期的技术积累和国外初创公司的经验总结?

image

敬请关注:

玮哥的博客 —— CSDN的传送门

玮哥的博客 —— 简书的传送门

玮哥的博客 —— 博客园的传送门

相关文章

  • 编程基础 之 Stack和Heap的区别

    Stack和Heap在哪儿 都在RAM,即都在内存中存放 Stack 在一个函数被调用时候,在stack会保留一块...

  • 浅析 Rust 所有权

    一、什么是 stack 和 heap stack 和 heap 都用于变量的内存存储。对于大多数的编程人员来讲,都...

  • heap和stack的区别

    1.heap是堆,stack是栈。2.stack的空间由操作系统自动分配和释放,heap的空间是手动申请和释放的,...

  • Stack 和 Heap的区别

    谁在用一般情况下每个thread都有自己的Stack,通过main开始创建,到func结束后消失;每个progra...

  • (转)Objective-C 拾遗:从Heap and Stac

    Objective-C 拾遗:从Heap and Stack到Block Stack和Heap heap和stac...

  • JS-深拷贝和浅拷贝

    要了解其本质区别,就需要了解堆和栈,值与引用的概念及区别 1.堆(stack)和栈(heap) stack为自动分...

  • swift~基础(整理)

    1,object-c和swift中struct、class的区别(包括heap和stack的区别) 大部分开发人员...

  • JVM内存模型

    JVM的内存中的堆(Heap)和栈(Stack)有什么区别 Stack是存放方法的局部变量的内存空间,每个方法都会...

  • 堆和栈(Heap and Stack)的区别!

    堆和栈最明显的区别是: 堆(Heap):队列优先,先进先出(FIFO—first in first out); 栈...

  • 二、JavaScript 中的堆内存和栈内存

    1 栈 stack”和“堆 heap” 简单的来讲,stack上分配的内存系统自动释放,heap上分配的内存,系统...

网友评论

    本文标题:编程基础 之 Stack和Heap的区别

    本文链接:https://www.haomeiwen.com/subject/kabypqtx.html