OOP 和堆/堆栈
OOP and heap/stack
我有一个看起来像这样的类
class A
{
int b;
void B()
{
int c;
}
}
int main()
{
A asdf;
A fdsa = new A();
}
A类的ASDF和FDSA实例有什么区别?在这两种情况下,哪个进入堆栈,哪个进入堆?
类 A 中的 b 变量是一个全局变量,无论类是如何声明的,都应该在堆中获得一个空格,对吗?
函数 B 的副本是否也分配给堆并从那里执行?
asdf
进入堆栈,而fdsa
进入堆。
首先,fdsa 应该是一个指针。
A a_on_stack; // Destroys when going out of scope
A* a_on_heap = new A(); // Need to call "delete a_on_head;" to remove from memory
希望这有帮助
在C++标准内存中没有堆栈或堆位置。它们是实现细节。
A asdf;
它是一个自动对象,会自动分配和销毁。
A *fdsa = new A();
它是一个动态和非自动的对象,分配和销毁应该由您管理。
关于标准堆栈的唯一内容是"堆栈展开"。
为自动构造的对象调用析构函数的过程 在从 try 块到引发异常的点的路径上 被称为"堆栈放卷"。[§15.2/3]
假设fsda
是声明为A*
(即指针):
-
asdf.b
在堆栈上。 -
fsda->b
在堆上。 - 每当你调用
A::B()
时,c
都会进入堆栈。
相关文章:
- 为什么堆栈和堆在内存中分离得如此之多?
- 为什么在堆栈和堆上创建变量会产生相同的程序集代码?
- 使用 valgrind 的地块测量 c++ 应用程序的最大内存使用量(堆栈和堆)
- 作者在解释C 中的堆栈和堆时犯了一个错误,或者我正在误读某些内容
- 为堆栈和堆指针重新分配内存
- 是否有特殊原因导致堆栈和堆在C++资源中不经常提及?
- 除了堆栈和堆模型之外,还为C++实现了哪些其他形式的自动和动态存储
- 删除时,QObject是否区分堆栈和堆分配的子级
- 在堆栈和堆之间动态切换
- 实例化对象C++的堆栈和堆分配
- 从堆栈和堆中取消分配内存
- 在堆栈和堆上使用较低级别的方法获取缓冲区的长度
- 线程是否具有不同的堆栈和堆
- C++ RAM 中的堆栈和堆
- C++中的RAM、硬盘、堆栈和堆
- 谁负责C++中的堆栈和堆
- C++堆栈和堆损坏
- c++对堆栈和堆有一定的理解
- 试图理解堆栈和堆在c++
- 关于内存管理、堆栈和堆的问题