堆和栈的区别

原创 2006年05月24日 10:34:00

堆:heap是大家共有的空间,分全局堆和局部堆。
  全局堆就是所有没有分配的空间
  局部堆就是你分配的空间
  堆在操作系统对进程初始化的时候分配
  运行过程中你也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏
  堆里面一般放的是静态数据比如static的数据和字符串常量什么的,资源加载后一般也放在堆里面
  一个进程的所有线程共有这些堆,所以对堆的操作要考虑同步和互斥的问题
  你的程序里面编译后所有的数据段都是堆的一部分
  堆的基址应该是加载在DS寄存器上的(这点俺不太肯定,但是汇编里面应该这样)

栈:stack是每个线程独有的,保存其运行状态和局部自动变量的
  栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是thread safe的
  每个C++对象的数据成员也存在在栈中
  每个函数都有自己的栈
  栈被用来在函数之间传递参数
  操作系统在切换线程的时候会自动的切换栈,就是切换SS/ESP寄存器
  栈空间不需要你在高级语言里面显式的分配和释放

相关文章推荐

堆与栈的区别详解

  • 2013年07月19日 17:08
  • 40KB
  • 下载

C++_静态存储区_栈_堆的区别

  • 2012年04月09日 23:45
  • 22KB
  • 下载

静态存储区、栈区、堆区的区别

内存分配有三种:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数...

[堆][栈]的区别

  • 2012年02月12日 15:37
  • 171KB
  • 下载

讲述开发平台中,堆与栈的区别

  • 2011年08月14日 12:19
  • 52KB
  • 下载

return str引出的内存分配方式---栈和堆的区别

请看这样一段程序: char *fun(void) {     char str[50];     ....     return str; } 由于str属于局部变量,位于堆栈中,...

堆和栈的区别

  • 2013年05月10日 21:36
  • 32KB
  • 下载

堆和栈的区别

  • 2008年05月28日 17:10
  • 34KB
  • 下载

JVM架构(006)_java堆和栈有什么区别

1、java堆和栈有什么区别 了解jvm内存管理看这里:jvm是如何管理内存的  在《jvm是如何管理内存的》这篇文章中,已经对PC寄存器(计数器 pc registers)、方法区(meth...

堆和栈的定义及其区别

  • 2009年04月02日 10:49
  • 158KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:堆和栈的区别
举报原因:
原因补充:

(最多只允许输入30个字)