免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1490 | 回复: 5
打印 上一主题 下一主题

问两个C++内存方面的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-23 13:38 |只看该作者 |倒序浏览
1. 一个进程在结束前没有释放堆上的内存(new和malloc), 那进程结束后这些内存是否由系统释放了, 注意是进程完全退出后哦
2. 有一个class A,  A a和 new A();  有什么本质上的区别? 听说是和delete相关的?

论坛徽章:
0
2 [报告]
发表于 2008-10-23 13:41 |只看该作者
原帖由 helloCU 于 2008-10-23 13:38 发表
1. 一个进程在结束前没有释放堆上的内存(new和malloc), 那进程结束后这些内存是否由系统释放了, 注意是进程完全退出后哦
2. 有一个class A,  A a和 new A();  有什么本质上的区别? 听说是和delete相关的?

1. 是
2. A在栈上 OS维护其生命期 new A在堆上 情理中应该是你维护其生命期(你new 你delete)

论坛徽章:
0
3 [报告]
发表于 2008-10-23 14:29 |只看该作者
感谢楼上, 另外再问一个
我在类A中声明一个 string  s;

在构造函数中有如下形式的赋值, 
char *tmp = new char[128];
/*一段处理代码, 填充tmp指向的空间*/
然后 s.assign(tmp);

请问在析构时我还需要手动释放s吗? 
string 的本质是不是类似一个char型指针?

论坛徽章:
0
4 [报告]
发表于 2008-10-23 14:34 |只看该作者
原帖由 helloCU 于 2008-10-23 13:38 发表
1. 一个进程在结束前没有释放堆上的内存(new和malloc), 那进程结束后这些内存是否由系统释放了, 注意是进程完全退出后哦

进程终结,有正常与异常之分。异常时,进程被挂起,成为僵尸进程。在这种情况下,仍然占着堆里的空间。

论坛徽章:
0
5 [报告]
发表于 2008-10-23 14:50 |只看该作者
原帖由 beepbug 于 2008-10-23 14:34 发表

进程终结,有正常与异常之分。异常时,进程被挂起,成为僵尸进程。在这种情况下,仍然占着堆里的空间。


僵进程只是在进程表中占了一个条目, 内存啥的应该被全部释放了

论坛徽章:
0
6 [报告]
发表于 2008-10-23 14:54 |只看该作者
string不是char

string s在栈空间,应该不需要手动释放
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP