初探Stack & Heap

1-22 505 views

之前一直对 栈/堆 有所听闻,但是并没有深入理解。

在ACM训练的时候,只知道递归层数如果很多可能导致爆栈(栈的大小最初的时候是固定的)。

今天再次看到栈和堆的时候,决定去好好了解一下。

去 stack overflow上面查询了一下。有所了解。

Stack:

  1. 栈是线程执行时的暂存空间,在一个函数被调用的时候,会有一块栈内的内存为其服务,用来保存局部变量和其他的数据,这也就是递归为什么爆栈的原因,递归次数太多,栈内保存的数据太多,超过了栈的内存大小。
  2. 栈的内存分配以及释放都很简单,和数据结构中的栈的性质差不多,FILO,这样简单的分配内存使得栈的效率很高。
  3. 在程序编译之前已经决定了栈的大小。
  4. 内存的分配和回收都是自动的,不需要人工干预。

Heap:

     1.  堆的内存分配是动态的,而不像栈那样初始的时候栈的内存大小已经确定了。

     2.  因为堆是动态分配的,所以在申请内存和释放内存的过程都比较复杂,所以内存分配效率就相对低一些。

     3.  内存的分配与回收都是手动的,用 new,free 等方法 申请内存或者释放。

 

以下代码来自 stack overflow

 

ping命令的实现

1.ping 的原理   ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它...

阅读全文

学习笔记-生产者消费者问题

生产者消费者问题有很多种情况,比如1:1,1:N,N:1,N:M 一. 模型1 生产者进程(){          pthread_mutex_lock(&lock);          生产产品;          pt...

阅读全文

欢迎留言

*