我什么时候需要动态记忆?

Nik*_*ntz 10 c memory malloc free

可能重复:
Malloc或普通数组定义?

我们了解到C和动态变量中存在动态内存:

#include <stdio.h>
int a = 17;
int main(void)
{
  int b = 18; //automatic stack memory
  int * c;
  c = malloc( sizeof( int ) ); //dynamic heap memory
  *c = 19;
  printf("a = %d at address %x\n", a, &a);
  printf("b = %d at address %x\n", b, &b);
  printf("c = %d at address %x\n", *c, c);
  free(c);  
  system("PAUSE");  
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我如何知道要使用哪种类型的内存?我什么时候该怎么办?

ham*_*ene 26

在以下情况下使用dynamic:

  1. 当你需要大量内存时.典型的堆栈大小为1 MB,因此大于50-100KB的任何内容都应该更好地动态分配,否则您将面临崩溃的风险.有些平台的限制甚至更低.

  2. 函数返回后,内存必须存在.当函数结束时,堆栈内存被破坏,动态内存在您需要时释放.

  3. 当你构建一个大小未知(即可能变大)的结构(如数组或图形)时,动态地改变或者太难以预先计算.动态分配允许您的代码在任何时刻自然地并且仅在您需要时自然地请求内存.不可能在for循环中重复请求越来越多的堆栈空间.

否则优先选择堆栈分配.它更快,不会泄漏.


gio*_*shc 5

当您的分配大小仅在运行时事先未知时,您可以使用动态内存。

例如,您要求用户输入姓名(假设最多 10 个姓名)并将它们存储在字符串数组中。由于您不知道用户将提供多少名称(仅在运行时),因此您必须在知道分配多少之后才必须分配数组,因此您将使用动态分配。

您当然可以使用固定大小的 10 数组,但是对于较大的数量,这将是浪费的