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