“堆” 和“自由存储区”的区别?“全局/静态存储区”和“常量存储区”的区别?难道仅仅是C 和 C++本身的区别

http://topic.csdn.net/u/20070321/14/abcea6e3-e0cb-4a69-85f0-8588710b4dac.html

 

看过这样的文章:
http://blog.csdn.net/welcome_ck/archive/2004/12/24/227961.aspx

在里面,将内存划分为5个部分,如下:

五大内存分区
        在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
        栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
        堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
        自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
        全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
        常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)


也看了一些此方面的书和文章,但不是很明白   “堆”     和     “自由存储区”的区别酒精在哪?难道仅仅是C   和   C++本身的区别么?


20  修改 删除 举报 引用 回复

进入用户个人空间
加为好友
发送私信
在线聊天
  • iu_81
  • 等级:
  • 可用分等级:
  • 总技术专家分:
  • 总技术专家分排名:
发表于:2007-03-21 14:29:201楼 得分:0
[自由存储区(free   store):]
自由存储区(free   store)是C++两个动态内存区域之一,使用new和delete来予以分配和释放。在自由存储区(free   store)中,对象的生存周期可以比存放它的内存区的生存周期短;这也就是说,我们可以获得一片内存区而不用马上对其进行初始化;同时,在对象被销毁之后,也不用马上收回其占用的内存区。在对象被销毁而其占用的内存区还未被收回的这段时间内,我们可以通过void*型的指针访问这片区域,但是其原始对象的非静态成员以及成员函数(即使我们知道了它们的地址)都不能被访问或者操纵。

[堆(heap)区:]

堆(heap)区是另一个动态存储区域,使用malloc、free以及他们的变形体来进行分配和回收。要注意,虽然在特定的编译器里缺省的全局运算符new和delete也许会按照malloc和free的方式来被实现,但是堆(heap)与自由存储区(free   store)是不同的——在某一个区域内被分配的内存不能在另一个区域内被安全的回收。堆(heap)中被分配的内存一般用于对类对象进行placement-new的构造和explicit的析构。堆中对象的生存周期与自由存储区(free   store)中的类似。
修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
  • jixingzhong
  • 等级:
  • 可用分等级:
  • 总技术专家分:
  • 总技术专家分排名:
  • 2

    17

    2

发表于:2007-03-21 14:39:242楼 得分:0
难道仅仅是C   和   C++本身的区别么

是的
修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
  • taodm
  • 等级:
  • 可用分等级:
  • 总技术专家分:
  • 总技术专家分排名:
  • 5

    3

发表于:2007-03-21 14:50:373楼 得分:0
问题是,这样的划分不是C、C++标准给出的规定。此blog的说法并不怎么正确。
有兴趣可看《C专家编程》
堆和自由存储区一般认为是同一名词。
        或者,自由存储区的一部分被开成堆,剩下的则是未使用。堆和栈都可以在自由存储区里
        进行自动扩展,直到2者相接而成为内存耗尽。
常量存储区则是“全局/静态存储区”的一部分,在os支持常量段的情况下,编译器可以把一部分const的全局变量放在这个位置。而且,这个“全局/静态存储区”并没有被C、C++标准给出名称,都是俗称,各个资料上可以名字差异很大。
修改 删除 举报 引用 回复
进入用户个人空间
加为好友
发送私信
在线聊天
  • xlbdan
  • 等级:
  • 可用分等级:
  • 总技术专家分:
  • 总技术专家分排名:
发表于:2007-03-21 16:05:434楼 得分:0
其实差不了太多的,这两个存储区它们的性质很像.
都是由用户来分配和释放,都有程序级的生存期.
我觉得LZ知道这些已经足够了吧.

 

是C   和   C++本身的区别。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值