程序员编程需要预计变量大小,指定特定内存大小给变量,无法通过代码动态给变量分配内存。程序中声明的变量在编译期间就已经被绑定到目标内存。
优点:程序鲁棒性(健壮性)高,毕竟内存分配都在掌控中。
缺点:只能使用数组这种确定内存占用大小的数据结构,不能使用链表等动态数据结构。不能够使用递归,每次重新调用相同函数都会覆盖之前的数据。
内存被划分成不同的内存帧。每次使用根据栈的先进先出特性,被调用函数的占用内存要先被释放掉。
优点:可以使用递归了。每次调用相同函数可以根据不同入参的不同而创建不同栈帧。
缺点:程序鲁棒性(健壮性)相对较差一点。使用递归也可能会导致栈溢出。需要保持数据的有序性,无法使用链表等动态数据结构。
变量保存在可变大小的内存区域中,即堆。数据也不被要求连续存放在内存中。
优点:可以使用链表、图等动态数据结构了。
缺点:程序鲁棒性(健壮性)更差一点,程序运行时的不可控性加大。堆内存分配本身也消耗性能。程序员的编码难度加大,要小心翼翼管理已分配的内存,比如C++使用malloc函数分配内存,用free函数释放malloc已分配的内存。如果没有回收好的话,会造成极大的浪费,毕竟内存也是稀缺的。
随着编程语言的不断发展,出现了以Java会代表的支持自动垃圾回收内存的编程语言,降低了程序员的编码难度。
优点:提高了编码效率的同时也兼顾了程序的鲁棒性。
缺点:当然GC本身也很消耗系统资源,降低系统运行效率,在实时性要求较高的应用场景和系统级编程不那么实用,而在web开发中需要频繁申请和释放内存,使用GC可以提高开发效率,这比系统延时更重要,提高系统性能可以通过其它渠道进行。
参考链接——https://blog.csdn.net/wuwuzhixiang/article/details/76599855
微信公众号:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。