C++中的类对象实例化

jieao111 2008-04-18 11:33:33
对方:C++中的类对象实例化后存在内存中的什么位置,堆还是栈?
堆和栈都有可能,回答是对的


不是在普通内存区或者堆里吗,还有栈吗
...全文
865 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
coverallwangp 2008-04-20
  • 打赏
  • 举报
回复
就是除了堆和栈之外的存储区。
jieao111 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 coverallwangp 的回复:]
动态创建对象时,如用new、malloc等是在堆里创建的
在一个函数内部创建对象时,是在栈里面创建的
全局对象、静态对象是在你所谓的"普通存储区"创建
[/Quote]

本来要结帖的。。又出来16楼,按一线天的说法,就没有"普通存储区"这个说法,,那么16楼说的全局对象又创建在哪呢
jieao111 2008-04-20
  • 打赏
  • 举报
回复
这个放着,有时间的话,好好研究下。。呵呵。。算法ing!!!
coverallwangp 2008-04-20
  • 打赏
  • 举报
回复
动态创建对象时,如用new、malloc等是在堆里创建的
在一个函数内部创建对象时,是在栈里面创建的
全局对象、静态对象是在你所谓的"普通存储区"创建

arong1234 2008-04-20
  • 打赏
  • 举报
回复
我觉得你还是把C++学完再搞这个吧,你还可以自定义new,这时放哪就不知道了,你可以自己决定放哪
[Quote=引用 14 楼 jieao111 的回复:]
也就是说在对象初始化时,只有两种可能,堆内的内存和栈内的内存
[/Quote]
jieao111 2008-04-20
  • 打赏
  • 举报
回复
也就是说在对象初始化时,只有两种可能,堆内的内存和栈内的内存
MagiSu 2008-04-20
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 flyingpig4945 的回复:]
内存分为:
栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。…
[/Quote]
这个问题是,new往往申请内存是用malloc来啊?!
flyingpig4945 2008-04-20
  • 打赏
  • 举报
回复
内存分为:
:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
全局/静态存储区:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,一般情况下不允许修改

引自某blog
godfile 2008-04-20
  • 打赏
  • 举报
回复
内存可分为四块:程序代码区,全局变量区,堆区,栈区
huang_8228 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 morre 的回复:]
1. 你没有使用new函数来实例化对象
2. 对象构造函数及其他成员函数没有使用new函数
满足以上两点,那么对象就在栈里,反之对象(至少一部分)就在堆中
[/Quote]

楼上少讲了一点,除了new以外还有malloc(),calloc(),realloc()等内存分配函数会在堆上面分配内存的。
arong1234 2008-04-19
  • 打赏
  • 举报
回复
class MyClass;

void Func(){
MyClass a; //这在栈
MyClass *pA=new MyClass;//这在堆
HelloDan 2008-04-19
  • 打赏
  • 举报
回复
malloc呢?
morre 2008-04-19
  • 打赏
  • 举报
回复
1. 你没有使用new函数来实例化对象
2. 对象构造函数及其他成员函数没有使用new函数
满足以上两点,那么对象就在栈里,反之对象(至少一部分)就在堆中
HelloDan 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jieao111 的回复:]
什么时候在栈,什么时候在普通内存区
[/Quote]

这样的问题百毒一下有很多,自己动一下手吧。我也是那样找来看的。
iambic 2008-04-19
  • 打赏
  • 举报
回复
什么叫普通内存区?
arong1234 2008-04-19
  • 打赏
  • 举报
回复
没有听说过普通内存区得概念,也许他指得是VirtualAlloc分配得内存,但是这一般和对象分配没啥关系
[Quote=引用 11 楼 jieao111 的回复:]
引用 4 楼 iambic 的回复:
什么叫普通内存区?


难道我们的老师误导我了。。。他给我讲一般分配内存有3种情况。。普通内存区,栈(需要保护现场),堆(new,..),,这个有问题吗
[/Quote]
arong1234 2008-04-19
  • 打赏
  • 举报
回复
我没有少讲,类对象是不应该用malloc, calloc,realloc进行分配得
而calloc应该是在栈上分配,而不是堆上
[Quote=引用 9 楼 huang_8228 的回复:]
引用 6 楼 morre 的回复:
1. 你没有使用new函数来实例化对象
2. 对象构造函数及其他成员函数没有使用new函数
满足以上两点,那么对象就在栈里,反之对象(至少一部分)就在堆中


楼上少讲了一点,除了new以外还有malloc(),calloc(),realloc()等内存分配函数会在堆上面分配内存的。
[/Quote]
jieao111 2008-04-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iambic 的回复:]
什么叫普通内存区?
[/Quote]

难道我们的老师误导我了。。。他给我讲一般分配内存有3种情况。。普通内存区,栈(需要保护现场),堆(new,..),,这个有问题吗
自由建客 2008-04-19
  • 打赏
  • 举报
回复
int a; //栈
int* p=new int; //堆
jieao111 2008-04-18
  • 打赏
  • 举报
回复
什么时候在栈,什么时候在普通内存区
加载更多回复(2)

64,654

社区成员

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

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