C与C++申请动态内存空间的异同

Posted whtmomo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C与C++申请动态内存空间的异同相关的知识,希望对你有一定的参考价值。

C与C++申请动态内存空间的异同

C语言与C++的关系,我们可以这样来形容,C++继承于C语言,却两者都有各自独特的特性,比如在如何申请动态内存空间上有显著的差别。

首先我们要知道,为什么需要动态申请内存空间? 

与动态分配相对应的是静态分配,在计算机中,内存分为栈区和堆区,其中栈区的空间相对于堆区会小很多,可以理解为,自己的家和仓库。

静态分配是在栈区提前分配一个固定大小的空间,而动态分配是需要多少分配多少,需要注意的是,动态分配需要程序员维护内存。

 

说了大致的分别,现在我们来看C语言和C++动态分配内存空间的区别:

下面是C语言动态分配方式的样式代码:

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4     int *p;
 5     p = (int*)malloc(sizeof(int));
 6     *p = 4;
 7     printf("%d\n",*p);
 8     free(p);
 9     return 0;
10 

 

 C语言动态分配内存需要一个名叫malloc() 函数,以及free()函数用来释放内存,这两个函数需要导入头文件"stdlib.h"。

malloc函数默认为void*类型,它的参数为申请空间的大小,malloc函数如果需要返回地址,则需要强转为指定类型,在上面代码中,需与指针p类型相匹配,则用(int*)强转,

free函数释放内存。它的参数为需要释放空间的指针。注意:一定要释放内存,不然会造成空间浪费。

 

下面是C++动态分配内存的样式代码:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4     int *p1  = new int;
 5     *p1 = 4;
 6     cout<<*p1<<endl;
 7     
 8     int *p = new int[3];
 9     p[0] = 1;
10     p[1]=2;
11     p[2] = 3;
12     p[3] = 4;
13     cout<<p[0]<<" "<<p[1]<<" "<<p[2]<<" "<<p[3]<<endl;
14     
15     delete p1;
16     delete []p;
17     return 0;
18 

 

 C++的动态内存分配不需要导入头文件,它具有new 和delete两个关键字用来行使这个功能,上述代码强调了常量与数组的区别,最大的区别在于释放内存的方式,C++分配内存的方式的优势在于,它不再需要计算数据类型的大小,也就是不需要再使用sizeof函数,相对来说,要方便一些。

 

好了,以上就是今天所说的,C语言与C++之间动态分配内存方式的分别,希望对大家有一点点帮助。

如有错误,请指出,一定加以改正。

以上是关于C与C++申请动态内存空间的异同的主要内容,如果未能解决你的问题,请参考以下文章

[C/C++]C++中的内存管理

[C++] C++中的内存管理机制

c/c++动态内存总结

在C语言进行编程中,为啥要释放旧内存?

c++中用new给未知大小的数组分配空间怎么弄?

C语言动态内存管理