动态内存分配如何在运行时分配内存


int a[10];

上面的代码将创建一个四个 int 变量大小的数组,因此程序将只能存储 4 个整数。现在考虑以下命令

int *a,*b,*c,*d;
a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));

上面的代码部分将创建四个 int 类型的指针,并将它们分配 int 大小的内存。我了解到动态内存分配在朗姆酒时分配内存。我想知道,无论使用数组还是malloc(动态内存分配),用户都将只获得四个整数大小的空间来存储。如果我们排除它是一个具有 int 大小内存的指针变量,那么动态内存分配将是什么用途。在这两种情况下,用户将只得到四个int空格,为了获得更多,他需要访问源代码。那么我们为什么要使用 malloc 或动态内存分配 ?

考虑

int a,*b;
cin >> a;
b= (int *)malloc(a*sizeof(int));

用户键入一个数字a并获取a整数。这里的程序员和编译器都不知道a的数字。

正如评论中指出的那样,这仍然是C++的不良风格,如果可能的话,请使用std::vector。即使new仍然比malloc好.但我希望(糟糕的)示例有助于阐明动态内存分配背后的基本思想。

你说得对,这一切都只是记忆。但是用法有所不同。

在一般情况下,您不一定提前知道您需要的内存量,以及何时可以安全地释放此类内存。 编写malloc及其朋友,以便他们可以跟踪以这种方式使用的内存。

但在许多特殊情况下,您碰巧会提前知道需要多少内存以及何时不再需要它。例如,您知道在运行简单循环时需要单个整数作为循环计数器,一旦循环完成执行,您就会完成它。虽然malloc和它的朋友仍然可以在这里为你工作,但局部变量更简单,更不容易出错,并且可能更有效率。

int a[10];

上面的代码行将分配一个 10 int 的自动存储持续时间的数组,如果它在本地范围内。

int *a,*b,*c,*d;

但是,上述内容将分配 4 个指针来int自动存储持续时间,同样,如果它在本地范围内。

a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));

最后,上述将为每个指针动态分配int变量。因此,上述每个指针都将指向单个int变量。

请注意,与静态内存分配不同,动态分配的内存可以在运行时释放和调整大小。自动存储持续时间的内存在超出范围时释放,但无法调整大小。

如果用 C 语言编程,则不需要强制转换 malloc 的结果。我建议你读一读:我投下马洛克的结果吗?

那么你在代码中使用 4 个指针做什么是不必要的;事实上,你可以只分配一个 4 个int的数组,malloc

int *a;
a = malloc(4 * sizeof(int));

相关内容

  • 没有找到相关文章