📜  存储分配

📅  最后修改于: 2020-12-06 07:58:22             🧑  作者: Mango

存储分配

分配内存的不同方法是:

  • 静态存储分配
  • 堆栈存储分配
  • 堆存储分配

静态存储分配

  • 在静态分配中,名称绑定到存储位置。
  • 如果在编译时创建了内存,则该内存将在静态区域创建,并且只会创建一次。
  • 静态分配支持动态数据结构,这意味着内存仅在编译时创建,并在程序完成后释放。
  • 静态存储分配的缺点在于,应在编译时知道数据对象的大小和位置。
  • 另一个缺点是递归过程的限制。

堆栈存储分配

  • 在静态存储分配中,存储组织为堆栈。
  • 激活记录在激活开始时被推入堆栈,并在激活结束时弹出。
  • 激活记录包含本地变量,以便将它们绑定到每个激活记录中的最新存储中。激活结束后,将删除locals的值。
  • 它基于后进先出(LIFO)工作,并且此分配支持递归过程。

堆存储分配

  • 堆分配是最灵活的分配方案。
  • 可以根据用户的要求,随时随地进行内存的分配和释放。
  • 堆分配用于动态地为变量分配内存,当不再使用变量时,将其收回。
  • 堆存储分配支持递归过程。

例:

fact (int n)
{
   if (n<=1)
       return 1;
   else 
       return (n * fact(n-1));
}
fact (6)

动态分配如下: