php7 源码分析-准备(堆和栈的基本知识)

1)栈区(stack)——存储参数值、局部变量,维护函数调用关系等。
2)堆区(heap)——动态内存区域,随时申请和释放,程序自身要对内存泄漏负责。
3)全局区(静态区)——存储全局和静态变量。
4)字面量区——常量字符串存储区。
5)程序代码区——存储二进制代码。


image.png

接下来写一段C代码来理解一下各变量分别存在哪个段区,代码如下

int a=0;     //全局初始化区
char *p1;    //全局未初始化区
main()
{
  static int b=0;    //全局(静态)初始化区
  int c;//栈
  char d[]="abc";    //栈
  char *p2;          //栈
  char *p3 = "hello";    //hello\0在常量区,p3在栈上
  p1 = (char*)malloc(10);
  p2 = (char*)malloc(20); //分配得来的10和20字节的区域就在堆区
  strcpy(p1,"hello");    //hello\0放在常量区,编译器可能会将它与p3所指向的"hello"优化成一个地方
}

总体来讲,栈上的变量是局部的,随着局部空间的销毁而销毁,由系统负责。

你可能感兴趣的:(php7 源码分析-准备(堆和栈的基本知识))