⼤家好,我是爱敲代码的⼩ ⼉相信⼤家在做⼒扣题时,经常要⽤到动态内存申请吧
那么什么是动态内存申请呢?
在进程的地址空间中,代码区、常量区、全局数据区的内存在程序启动时就已经分配好了,它们⼤⼩固定,不能由程序员分配和释放,只能等到程序运⾏结束由操作系统回收。这称为静态内存分配,我们平常在主函数⾥定义的各种变量基本上都是属于这类哈 。栈区和堆区的内存在程序运⾏期间可以根据实际需求来分配和释放,不⽤在程序刚启动时就备⾜所有内存。这称为动态内存分配 。
为什么要⽤到动态内存申请呢?
相信⼤家在敲代码的时候,经常会遇到这种情况:不确定数组该定义多⼤,定义的⼤了是浪费内存,⼩了吧动不动就会出现数组越界,好犹豫啊!没关系动态内存申请就很好解决了这个问题,咱⽤多少他就能给咱分配多少:
那么怎样进⾏动态内存申请呢 ,当然离不开我们的动态内存申请函数了。
帝王蟹蒸多久malloc 函数(这个主要⽤在c 语⾔上)原型:void* malloc (size_t size);作⽤:在堆区分配 size 字节的内存空间。
返回值:成功返回分配的内存地址,失败则返回NULL。
注意:分配内存在动态存储区(堆区),⼿动分配,⼿动释放,申请时空间可能有也可能没有,需要⾃⾏判断,由于返回的是void*,建议⼿动强制类型转换 。例如:
这⾥malloc的传⼊参数为申请内存的字节数,返回值为申请到的内存的⾸地址,是什么类型的地址,就要强转成什么类型 ,这⾥的指针类型是整形,所以要强制类型转换(int*)
男生和女生一起打扑克这⾥的 p 代表的是申请到的内存,并且有效内存字节数为 1024。
如果我们要申请⼀个长度为 n 的整型数组的内存,可以这么写:
其中sizeof(int)表⽰的是⼀个int 占⽤的字节数,那么⼀个长度为 n 的int 类型的数组,需要的字节数⾃然就是 sizeof(int) * n ,有相应的内存申请,就要有对应的内存释放。malloc函数对应的内存函数是free函数,⽐如当我们上⾯申请的指针 p 使⽤过了,我们就可以⽤free(p)释放我们刚才申请的内存 。
tips:千万不要忘记及时释放内存呀!要是不释放的话,很容易造成内存泄漏这样严重的后果的
new 和delete (多⽤于c++中)
在中,刚才说的malloc和free两个函数仍然可以使⽤,但是C++⼜新增了两个关键字,new 和 delete:new ⽤来动态分配内存,delete ⽤来释放内存。 int *p = (int *)malloc(1024);
int *p = (int *)malloc( sizeof(int) * n );
⽤ new 和 delete 分配内存更加简单 :
运城旅游景点大全景名1. int *p = new int; //分配1个int型的内存空间
2. delete p; //释放内存
new 操作符会根据后⾯的数据类型来推断所需空间的⼤⼩。张瑞希整容失败
水煮鱼的做法大全>麦王争霸梁君诺如果希望分配⼀组连续的数据,可以使⽤ new[]:
1. int *p = new int[10]; //分配10个int型的内存空间
2. delete[] p;
⽤ new[] 分配的内存需要⽤ delete[] 释放,它们是⼀⼀对应的。
和 malloc() ⼀样,new 也是在堆区分配内存,必须⼿动释放,否则只能等到程序运⾏结束由操作系统回收。为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和C语⾔中 malloc()、free() ⼀起混⽤ 。 在C++中,建议使⽤ new 和delete 来管理内存,它们可以使⽤C++的⼀些新特性,最明显的是可以⾃动调⽤构造函数和析构函数
好了,今天的内存申请就先讲这么多 ,今天算是我正式写的第⼀篇博客,内容还有很多不⾜之处还望各位码友见谅
不说了,要去⼲饭了 ,⼤家在新的学期⼀起加油
下期预告:你真的会⽤排序函数吗?
发布评论