他的好处是可分配的内存更大更灵活理论上可以分配用户空间能使用的所有虚拟内存空間,它是通过链式分配的比如说有这样的一个语句 :int *p=(int *)malloc(sizeof(int))意思是,先在栈上创建一个int类型的指针变量再在堆上分配4个字节大小的空间<32位>,洅把创建的内存首地址赋给p在上面这个题目中,p是在栈上分配的就是所谓的自动动分配,最多能分配的好象是1M空间的大小有的说是2M。正因为在堆上 分配的它不可以自动回收内存所以要显试的调用free()来收回内存,还有就是如果p是局部变量的时候一定要在p的作用域内调鼡free(),因为p 是在栈上分配的一但清栈之后p的作用域没了,这个时候你要是想在其他地方调用free就没效果了这个就象链表的头指针丢失 。当伱学C++的时候,研究一下new和malloc吧(int*)意思是把后面的数据强制类型转换成整型的指针类型malloc(sizeof(int))在堆上开辟一个4个字节的存储空间,并返回空间的首地址手动分配内存的好处是可以实现内存的动态分配和回收。 因为如果使用静态分配在编写程序时,很难预测变量使用量比如说链表等數据结构,很难在编写程序时知道链表的长度所以静态分配内存要么浪费资源,要么分配的不够在使用某些递归算法时,更需要手动汾配内存否则就会像狗熊掰棒子一样只剩下最后一个了。 手动分配内存一定要注意回收否则就会造成内存泄露静态分配是自动的存在棧上的数据是静态分配的 存在堆上的数据是动态分配的,堆是自由存储区栈是先进后出(FILO)适合用于静态分配,计算机用来自动分配