以下是编译器存储分配的摘要。
1.静态与动态
静态的:只能由编译器查看程序的文本来进行存储。静态分配尽可能多的数据对象的原因之一是可以将这些对象的地址编译为目标代码。
动态的:可以通过在程序运行时查看程序的功能来进行存储。
2.静态的
全局常量和由编译器生成的其他数据(例如,支持垃圾回收的信息)被分配给静态存储。静态变量在执行开始之前已绑定到存储单元,并在整个执行过程中始终绑定到同一存储单元。例如,C静态变量。
优势:效率(直接寻址),对历史敏感的子程序支持
缺点:缺乏灵活性,如果这是* only *类型的变量,则不能进行递归,就像Fortran一样
3.堆
可能比对创建它的过程的调用寿命更长的数据通常分配在堆上。例如新建以创建可以在过程之间传递的对象。
堆大小无法在编译时确定。仅通过指针或引用进行引用,例如,C ++中的动态对象,Java中的所有对象
优势:提供动态存储管理
缺点:效率低下且不可靠
4.堆叠
过程本地名称是在堆栈上分配的空间。在编译时无法确定堆栈的大小。
优点:
允许递归
节省存储空间
缺点:
分配和释放
子程序的开销不能对历史敏感
无效引用(间接寻址)
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。Java:静态存储vs堆vs堆栈

相关文章: