新人问关于堆的有关问题

新人问关于堆的问题
一直不清楚不管是使用new还是malloc用来分配内存就是指的动态内存分配
但是这里的动态在哪里?分配的空间能动态增长吗?
还有就是对于堆和栈我只是理解到他们的区别是映射在虚拟地址空间的不同地址区域,一个手动回收,一个需自动回收。可分配的大小的差异。
希望有人能详细解答下2者的区别,否则使用起来都不知道为什么?
新手求解,先谢谢各位啦


------解决方案--------------------
很好理解啊!比如用一个程序处理学生资料作为例子:

静态分配的方案:看看学生的总数最大限额是多少,定义一个大于这个限额的数组来处理。

这样不管你这次运行实际要处理的学生数量是多少,只要一启动程序就得先向操作系统要来那么大的空间。

动态分配的方案:每输入一个学生相关信息之前就向操作系统申请一小块空间,用于存储这个学生的资料。

这样刚启动程序时并不占用多少空间,而随着输入的学生信息逐步增加,程序才逐步多占内存。