关于c ++:动态内存分配如何在运行时分配内存?

How Dynamic memory allocation allocates memory during run time ?

1
int a[10];

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

1
2
3
4
5
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大小的内存。我了解到动态内存分配在RUM时间分配内存。我想知道,不管使用数组或MALLC(动态内存分配),用户将只得到四个int大小的空间来存储。如果我们排除它是一个带有int大小内存的指针变量,那么动态内存分配的使用将是什么。在这两种情况下,用户只会得到四个int空间;需要访问源代码。那么我们为什么要使用malloc或动态内存分配呢?


考虑

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

该类型的用户数和aa得到考虑。的数量是不知道的任何a程序员或编译器到这里。

在尖"的评论,这仍然是在C + +的坏作风,用std::vector如果可能的。甚至比mallocnew仍然是。但我希望在的(坏)的例子帮助澄清背后的基本思想的动态内存分配。


你对这一切只是记忆。但是,有一个差分对的使用。

在一般的情况下,你不一定知道未来的时间,你将需要的内存量的时候,这样的内存,然后可以被安全释放。malloc及其朋友是这样的,他们可以继续用这种方式跟踪内存的使用。

但在一些特殊情况下发生的,你知道多少内存你前面的球队时,你需要将它将停止和需要。例如,你知道你需要单一的整数计数器的运行时行为的简单的循环,你将用它做一次环已被完成的。malloc及其朋友在这里工作,你仍然可以是局部变量,simpler,不易错和将可能是更有效的。


1
int a[10];

上述代码将分配一个线阵列的10 int自动存储时间,如果它是在本地范围内。

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

然而,上述的配置,也会分到4 int自动存储时间,同样,如果它是在本地范围内。

1
2
3
4
a= (int *)malloc(sizeof(int));
b= (int *)malloc(sizeof(int));
c= (int *)malloc(sizeof(int));
d= (int *)malloc(sizeof(int));

最后,将上述的和可变的,动态分配的int每每个指针。每一个指针的操作系统,将上述的指责int到单变量。

请注意,动态分配的内存可以被释放,在不同的resized静态存储器和运行时配置。记忆存储时间是自动释放时,超出范围的运行,但不能resized。


如果你的程序在C,结果是不必要的malloc铸造。我suggest你读这一结果:铸造的malloc的吗?

然后你做什么在你的代码是不必要的,4分;事实上,你可以在一个阵列配置4只与一个intmalloc

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