0
A
回答
3
这意味着全部为对象的数据被分配在堆栈上,并且当电流方法终止将被弹出。
替代方案(发生在C#和Java中,或者如果您在C++中使用指针)是在堆栈上有一个引用或指针,它指向在堆上分配的对象数据。
我认为这里的“内联”仅仅意味着“作为该方法的堆栈框架的一部分”,而不是与该方法分开存在。
2
那么,你知道堆栈是什么,对吧?如果声明,比方说,C函数:
int foo() {
int bar = 42;
return bar;
}
当函数被调用时,有关堆栈上的功能的信息产生了一些空间,整数bar
被分配有作为。当函数返回时,该堆栈帧中的所有内容都将被释放。
现在,在C++:
class A {
int a;
int b;
A(int x, int y) {
a = x;
b = y;
}
~A() { // destructor
cout << "A(" << a << "," << b << ") being deleted!" << endl;
}
}
void foo() {
A on_the_stack(1,2);
A *on_the_heap = new A(3,4);
}
像Java语言中,所有的对象都是在堆上分配(除非编译器某种优化)。但是在一些像C++这样的语言中,类对象可以像int
s或float
s那样直接进入堆栈。除非您明确呼叫new
,否则不会使用堆中的内存。请注意,我们的on_the_heap
对象永远不会被释放(通过调用delete
),所以它会导致内存泄漏。另一方面,on_the_stack
对象在函数返回时会自动释放,并且在此之前调用它的析构函数。
相关问题
- 1. 堆栈或堆上的对象分配
- 2. 对象分配在堆栈或堆C++
- 3. 受保护的堆对象堆栈vs堆栈分配
- 4. 内存分配,堆栈和堆栈
- 5. 基于C++堆栈的对象分配
- 6. 分配在堆或栈上?
- 7. 堆分配的对象是否将其成员分配到堆栈上?
- 8. 在堆栈上分配对象的好处?
- 9. 在堆栈上创建对象时分配的内存在哪里?
- 10. 堆栈帧内存分配
- 11. C++ - 如何防止对象在堆栈上分配?
- 12. 堆/堆栈上的类成员分配?
- 13. 在堆上分配的对象
- 14. Java堆和堆栈内存分配
- 15. 垃圾收集语言是否可以在堆栈上分配内联对象?
- 16. 在堆上分配vs在递归函数中分配堆栈
- 17. C++在堆和堆栈上分配内存?
- 18. 将堆分配对象上的数据成员分配到堆还是堆栈上?
- 19. 堆栈/堆上的对象创建?
- 20. 对象的堆栈上或堆栈上的隐藏成员?
- 21. 性能差B在C + +/w的堆中分配对象和堆栈分配的对象
- 22. 基于堆栈的内存分配
- 23. 当函数内部静态构造对象时,它会分配在堆上还是堆栈上?
- 24. c/C++在堆栈上分配
- 25. D3堆栈()vs嵌套对象
- 26. C++堆栈与堆分配
- 27. 堆栈或堆栈分配不正确
- 28. C堆栈分配
- 29. g ++在堆栈上分配未使用的内存是什么?
- 30. 使用COM创建的对象是否会分配堆或堆栈分配的内存?
句子的上下文是什么? – nus 2010-06-26 14:20:34