新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → C++中内存的分配 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 5547 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: C++中内存的分配 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     bnflower 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:78
      门派:XML.ORG.CN
      注册:2006/4/7

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给bnflower发送一个短消息 把bnflower加入好友 查看bnflower的个人资料 搜索bnflower在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看bnflower的博客楼主
    发贴心情 C++中内存的分配

    有一个结构A
    下面是构造A的内存空间方法:
    1)A* a = new A;

    2)A* a = (A*)malloc(2*sizeof(A));  

    3)A* a = new A; a = (A*)malloc(2*sizeof(A));

    4)A a;

    这四者的内存分配是否如下:
    1)在堆里分配一个sizeof(A)大小的内存空间,a指向该内存空间首址。

    2)在堆里分配一个2*sizeof(A)大小的内存空间,a指向该内存空间首址。

    3)在堆里分配一个sizeof(A)大小的内存空间,a指向该内存空间首址。随后又在堆里分配了一个2*sizeof(A)大小的内存空间,并修改了a指针指向该内存空间首址。这样由前一步new出来的内存空间就没有指针指向,也就不能通过delete a来释放其占用的内存空间了,这造成了内存泄漏。

    4)在栈里分配了sizeof(A)的内存空间,该内存空间在a超出了其作用域后,由系统自动回收。

    通过A *a = new A 与 A *a = (A*)malloc(sizeof(A))分配的内存动作是相似的?同时在堆里动态分配了sizeof(A)大小的内存空间。

    A a1[20]; A *a2 = a1;的结果是否和A* a3 = (A*)malloc(20*sizeof(A))的结果相同?起一个的内存分配应该是在栈上进行,在超出了a2的作用域后,a2所指向的a1的内存空间会被释放(即在堆上释放了sizof(a1)到小的内存空间)。同过a3指向的内存空间必须通过free来手工释放。

    大家请发表一下自己的看法...


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/7 14:22:00
     
     rong9.13 美女呀,离线,快来找我吧!
      
      
      等级:大二(研究汇编)
      文章:15
      积分:247
      门派:XML.ORG.CN
      注册:2006/3/24

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给rong9.13发送一个短消息 把rong9.13加入好友 查看rong9.13的个人资料 搜索rong9.13在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看rong9.13的博客2
    发贴心情 
    我基本同意楼主的看法
    在c++中一般都用new,它比c中的malloc中的用法简单.
    应用程序数据所占的内存分为:静态存储区、栈和堆。
    在程序运行开始前就分配的存储空间都在静态存储区中.
    A a1[20]; A *a2 = a1;分配的内存应该是在静态存储区中,局部变量在栈中分配存储空间.
    呵呵^^^^^不知道对不对,malloc函数分配的内存空间使用也困扰了我好长时间^^
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/9 11:10:00
     
     bnflower 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:78
      门派:XML.ORG.CN
      注册:2006/4/7

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给bnflower发送一个短消息 把bnflower加入好友 查看bnflower的个人资料 搜索bnflower在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看bnflower的博客3
    发贴心情 
    使用malloc和new的区别现在认为是这样的:

    new有两个动作:1、为对象分配内存空间
                            2、初始化已分配内存空间的对象

    malloc只用一个动作:即只进行内存空间的分配,而该内存中的对象并没有被进行初始化。这样该对象的值都是一些随机值。

    大家的意见呢

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/4/17 21:00:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/14 0:35:48

    本主题贴数3,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    52.979ms