以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- C++中内存的分配 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=30155) |
-- 作者:bnflower -- 发布时间:4/7/2006 2:22:00 PM -- 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; 这四者的内存分配是否如下: 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来手工释放。 大家请发表一下自己的看法... |
-- 作者:rong9.13 -- 发布时间:4/9/2006 11:10:00 AM -- 我基本同意楼主的看法 在c++中一般都用new,它比c中的malloc中的用法简单. 应用程序数据所占的内存分为:静态存储区、栈和堆。 在程序运行开始前就分配的存储空间都在静态存储区中. A a1[20]; A *a2 = a1;分配的内存应该是在静态存储区中,局部变量在栈中分配存储空间. 呵呵^^^^^不知道对不对,malloc函数分配的内存空间使用也困扰了我好长时间^^ |
-- 作者:bnflower -- 发布时间:4/17/2006 9:00:00 PM -- 使用malloc和new的区别现在认为是这样的: new有两个动作:1、为对象分配内存空间 malloc只用一个动作:即只进行内存空间的分配,而该内存中的对象并没有被进行初始化。这样该对象的值都是一些随机值。 大家的意见呢 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
48.340ms |