c语言中堆和栈的区别 jvm元空间与堆和栈的区别?
jvm元空间与堆和栈的区别?
1内存分配策略
1)静态存储:在编译时确定每个数据目标在运行时的存储空间需求(没有可改变的数据结构,代码中没有嵌套递归)。
2)堆栈存储:编译时数据需求未知,确定运行时模块入口,动态分配存储。当在操作过程中进入一个程序模块时,在分配其内存之前,必须知道该程序模块所需的数据区的大小。
3)堆存储:编译时和运行时的模块条目无法确定,是动态分配的。
2Java内存模型中的堆和栈
1)两者的关系:引用对象和数组时,栈中定义的变量存储的是堆中目标的第一个地址。
2)两者的区别:
(1)管理模式:栈自动释放(对应方法完成),栈需要GC(垃圾收集机制)。
(2)空间大小:堆大于栈。
(3):堆产生的碎片比堆产生的碎片小得多。
(4)分配栈支持静态和动态分配,堆只能动态分配。
(5)效率:堆比栈效率低。
(6)栈是线程私有的,堆是线程共享的。
C语言中有哪些存储类型?
C语言中有四种存储类型:auto、extern、register、static。存储类型表示变量应该在进程的哪个段分配内存空间,数据区、BBS区、堆栈区、堆区都可以为变量分配内存存储空间。
1.自动存储类型
Auto只能用于标识局部变量的存储类型。对于局部变量,auto是默认的存储类型,不需要由display指定。因此,由auto标识的变量存储在堆栈区域。
2.外部存储类型
Extern用于声明在当前项目的其他文件中定义的全局变量在当前文件中被引用。如果全局变量没有初始化,它会被存储在BBS区,编译时它的值会自动赋为0。如果它已经被初始化,它将被存储在数据区。全局变量的生命周期,无论是否初始化,都是整个程序运行的过程。为了节省内存空间,在当前文件中使用extern声明其他文件中定义的全局变量时,不会为它们分配内存空间。
3.寄存器存储类型
声明为寄存器的变量从内存转移到CPU寄存器后,会停留在CPU寄存器中,所以访问寄存器变量会大大提高效率,因为在将变量从内存转移到寄存器的过程中节省了几个指令周期。
4.静态存储类型
声明为静态类型的变量,不管是全局的还是局部的,都存储在数据区,它们的生命周期就是整个程序。如果它们是静态局部变量,它们的作用域在一对{}内。如果它们是静态全局变量,那么它们的作用域是。对于当前文件。静态变量如果没有初始化,会自动初始化为0。静态变量只能初始化一次。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。