C中的静态数据区、代码区、堆、栈

原创 2012年03月28日 00:00:05
--------------- 
         Heap           | 
--------------- 
         Stack         | 
--------------- 
               Const   |(字符串常量通常放在data-const区中) 
   data--Common| 
               Data     | 
--------------- 
         Code           | 
--------------- 


A   静态数据区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化,如函数中的静态变量就是在程序第一次执行到定义该变量的代码时才被初始化。所分配的内存在程序的整个运行期间都存在,如全局变量,static变量等。 
注意:初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过void*来访问和操纵,程序结束后由系统自行释放。 


B   代码区:存放函数体的二进制代码; 


C   栈区:存放自动变量。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元由编译器自动释放,超出其作用域外的操作没有定义。栈内存分配运算内置于处理器的指令集中,效率很高,但分配的内存容量有限。栈存放函数的参数值,局部变量的值等。 


D   堆区(自由存储区):在运行的时候调用程序(如C中的malloc或C++中的new)分配内存,可以在任何时候决定分配内存及分配的大小,用户自己负责在何时释放内存(如用free或delete)。堆中的所有东西都是匿名的,这样不能按名字访问,而只能通过指针访问。 

相关文章推荐

堆、栈及静态数据区详解

内存分为代码区、全局数据区、堆区和栈区。堆一般存放动态数据,栈里一般存放局部成员。 关于堆栈和堆的概念(hangwire发表于2002-1-11   21:31:06)[问题]C++中创建本地(或者说...
  • qiudw
  • qiudw
  • 2009年02月26日 20:58
  • 4919

堆、栈、程序区、静态数据区、字符常量区的介绍与区别

自己总结一下关于内存分区的基础知识:         先上图:     在VS测试中发现,字符常量区(只读数据区)在编译时候与静态数据区放在了一起。因此在静态数据区的几种类型没有独立的地址...

C/C++堆区、栈区、常量区、静态数据区、代码区详解

转自:http://blog.csdn.net/subo86/article/details/4814874 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部...

C/C++堆、栈及静态数据区详解

  • 2008年11月29日 13:11
  • 38KB
  • 下载

C/C++堆、栈及静态数据区详解

五大内存分区在C++ 中,内存分成5 个区,他们分别是堆、栈、自由存储区、全局/ 静态存储区和常量存储区。栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通...

C++堆、栈及静态数据区详解

  • 2010年05月20日 14:08
  • 34KB
  • 下载

堆、栈及静态数据区详解

原作者:风小云 原文链接地址:http://blog.csdn.net/welcome_ck/archive/2004/12/24/227961.aspx 五大内存分区     在C++中,内...

堆、栈及静态数据区详解(C++)

全局区(静态区)(static)--,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。堆:首先应该知道操作系统有...

C++堆、栈和静态数据(转)

原文请点击:http://www.berry0123.cn/heap-stack-and-static-data.html在此再次谢谢原文作者!!1 堆、栈及静态数据区详解  五大内存分区  在C++...

堆栈及静态数据区

堆栈及静态数据区 转载▼ 五大内存分区     在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。     栈,就是那些由编译器在需要...
  • kobbee9
  • kobbee9
  • 2012年04月10日 09:02
  • 350
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C中的静态数据区、代码区、堆、栈
举报原因:
原因补充:

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