今天在C语言中实现了一个基于链表的栈,由于链表不需要像动态数组那样拷贝值,理论上来说在经常插入和删除较多数据时,其性能应该优于动态数组。但是在我的实际操作中发现,用链表实现的栈要比动态数组的实现低效很多。
经过一番查找后发现,链表拖慢的原因是频繁的malloc和free的开销太大,所以在实际使用中,很少有这样直接对链表的使用,而是采用内存池的策略。所谓内存池的策略,就是自己一次分配一块大内存空间,然后自己实现类似malloc和free的函数,从而达到减少对malloc和free的调用。实际的高级语言中,大部分时候都是使用动态数组而不是使用链表的的,如Java里的ArrayList,C++里的vector。or。