关于一个类的新产生的对象的内存分配情况疑问?

zyren988 2009-02-13 09:56:17
1 我在有的地方看到一般把内存划分堆,栈(什么情况是在这上面分配),自由空间(还有其它的吗?它们的区别)
凡是用new自己申请都是在堆上开辟的,用完需要自己delete手动释放(与其它分配方式仅仅有这样的区别吗?)
malloc分配的好像是自由空间吧!
那一般的int a=5,*p;是在哪里分配的?好像它们生命期结束是由系统自动回收
那int a=5;中的5又是放在哪里?
2 一个类有很多变量和函数如:
class CMy
{
public:
int a,b;
int *p,q;
CMy()
{
a=5;
b=10;
p=new int(100);
q=(int *)malloc(sizeof(int));//c++里面好像也能用这个函数吧!
}
void Function1();
void Function1();
...

};
我实例化一个对象 CMy my;后它会首先开辟相应的所有空间(包括变量和函数,

且是连续的)吗?且CMy my2与my的空间也是联系的吗?(我测试了一下似乎是的)
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangtianyin 2009-02-13
  • 打赏
  • 举报
回复
一般的变量是在栈上分配空间的,凡是用new自己申请都是在堆上开辟的,用完需要自己delete手动释放,不然会造成内存泄露,另外new 和malloc在功能上有些不同,如果是一般的变量,二者是差不多的,但对于一个类的对象就不同了,我们知道在使用对象的时候要调用构造函数,如果你用malloc是不会调用构造函数的,而用new系统会完成构造函数的功能,所以是有区别的。
内存空间的分配并不总是连续的,有一定的随即性,其他的我也不是太清楚,不敢乱说,怕误导你,自己到网上去看吧
waizqfor 2009-02-13
  • 打赏
  • 举报
回复
1 我在有的地方看到一般把内存划分堆,栈(什么情况是在这上面分配),自由空间(还有其它的吗?它们的区别)
凡是用new自己申请都是在堆上开辟的,用完需要自己delete手动释放(与其它分配方式仅仅有这样的区别吗?)
malloc分配的好像是自由空间吧!
那一般的int a=5,*p;是在哪里分配的?好像它们生命期结束是由系统自动回收
那int a=5;中的5又是放在哪里?
=============================>
栈是系统给程序分配的空间 比如你定义一个数组 char[10] 那么系统就给它10个空间 这是在栈上 而堆上是要程序员自己去申请 自己去管理的 一般用malloc
和new申请 因为是自己管理的 所以每次申请用完的时候 都用free和delete自己删除 要不容易内存泄露
malloc是C里面的动态分配形式 跟C++的new一个道理
int a=5,*p//这个a应该是一个局部变量 要不就是全局变量 作用域不同 消失的时间也不同 系统会在它失去作用域的时候释放他 不过没有一个具体时间
*p 应该是一个常量 也就是const型的 存储在常量区 只读 如果不分配空间 不能被使用
http://www.yuanma.org/data/2006/1121/article_1841.htm具体的LZ阅读下文章吧
oyljerry 2009-02-13
  • 打赏
  • 举报
回复
堆上数据空间大,可以灵活控制释放的时机(delete的时候)

int a=5,*p, 等这都是栈上数据除了生命期就自动释放了

CMy my; 分配的是成员变量,虚函数表等空间,函数在另一个位置

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧