Bin*_*eee 0 c++ operating-system dynamic-memory-allocation
我对这三个概念有些困惑:堆栈、堆和动态内存分配。我将提供 C++ 中的示例。
我说给定一个程序,对于它的所有变量、数组,也许还有堆栈上的对象,当程序刚刚启动时,所有需要的内存空间都已经存在,所以一切都是预先确定的吗?但是当程序运行时,对我来说它仍然听起来像“动态”,因为堆栈仍在变化,在运行时值仍在推入,从堆栈中弹出。
关于堆,对于“动态”的意义,我从这个站点上的一些答案中提出了这个想法,它是针对运行时确定的:
cin >> box_size;
int *box = new int[box_size];
Run Code Online (Sandbox Code Playgroud)
但是,那么这个†怎么样:
Box surprise_box = new Box();
Run Code Online (Sandbox Code Playgroud)
我已经知道编译时需要多少空间,对吗?但它仍然在堆上。所以看起来“动态”内存分配只是关于内存分配/释放的负担成为程序员的负担之一。
†:应该是Box *ptr_surprise_box = new Box();。(感谢评论)
我明白为什么我的问题被认为太宽泛了,但我不知道如何将它们分成几部分。更糟糕的是,现在我正在考虑这是否与地址空间和编译时确定的那些内存地址有关。