PHP变量、内存、代码与内存分区
栈区:系统进行操作,由编译器⾃动分配和释放 ,存放函数的参数值、局部变量的值等,甚⾄函数的调⽤过程都是⽤栈来完成。其操作⽅式类似于数据结构中的栈。
堆区:存储复杂数据,大但是效率低
全局区(静态区)(static):全局变量和静态变量的存储是放在⼀块的,初始化的全局变量和静态变量在⼀块区域, 未初始化的全局变量和
未初始化的静态变量在相邻的另⼀块区域。程序结束后由系统释放空间。
⽂字常量区:常量字符串就是放在这⾥的。 程序结束后由系统释放空间。
代码段:存储程序的部分(不执行)
内存和代码
代码装载:从脚本文件中将代码取出来,进行编译,将编译的结果放在代码段
代码执行:从代码段中一行一行的执行代码
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; //栈中
char s[] = “abc”; //栈中
char *p2; //栈中
char *p3 = “123456″; //123456\0在常量区,p3在栈上
static int c =0; //全局(静态)初始化区
//以下分配得到的10和20字节的区域就在堆区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
strcpy(p1, “123456″); //123456\0放在常量区,编译器可能会将它与p3所指向的”123456″优化成⼀个地⽅
.1.一个Java文件,只要有main入口方法,我们就认为这是一个Java程序,可以单独编译运行。
2.无论是普通类型的变量还是引用类型的变量(俗称实例),都可以作为局部变量,他们都可以出现在栈中。只不过普通类型的变量在栈中直接保存它所对应的值,而引用类型的变量保存的是一个指向堆区的指针,通过这个指针,就可以找到这个实例在堆区对应的对象。因此,普通类型变量只在栈区占用一块内存,而引用类型变量要在栈区和堆区各占一块内存
脚本执行结束:系统会回牧所有的内存(栈区,代码段)
Java把内存划分为以下bai4个部分:
1、栈区(stacksegment)—由编译器自动du分配释放,存放函数的参数zhi值,局部变量的值等,具体方法dao执行结束之后,系统自动释放JVM内存资源。
2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。
3、静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放。
4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。
1Java中对象的存储位置
String aa = new String();
new创建的对象存储在堆内存中;
aa这个局部变量存储在栈内存中;
2.Java中常量的存储位置
常量存放在常量池中,而常量池在堆内存中
3.Java中局部变量的存储位置
局部变量存放在栈内存中
4.Java中全局变量和Static常量的存储位置
存放在全局数据区内存中
原文链接:https://blog.csdn.net/feiqipengcheng/article/details/108518558

浙公网安备 33010602011771号