当前位置: 首页 > wzjs >正文

网站建设技术人员要会什么常德市做网站的公司

网站建设技术人员要会什么,常德市做网站的公司,wordpress 文章摘要,惠州网站建设 翻译6前言 什么是动态内存? 在C语言中,动态内存是指在程序运行时根据实际需求动态分配和释放的内存。与静态内存(在编译时分配,生命周期与程序或函数运行周期相同)不同,动态内存的分配和释放由程序员通过特定的函…

前言

什么是动态内存?

在C语言中,动态内存是指在程序运行时根据实际需求动态分配和释放的内存。与静态内存(在编译时分配,生命周期与程序或函数运行周期相同)不同,动态内存的分配和释放由程序员通过特定的函数手动控制,常用的函数为molloc、free、realloc、calloc,其开辟的空间在堆上

为什么需要动态内存?

int i = 20;
char arr[20];

上面的代码中,是程序在栈上开辟的空间,用于储存变量的,而在栈上开辟的空间有两个特点(都是静态的):

  • 空间开辟大小是固定的
  • 数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能调整

那么,对于程序员来说,我们有时候只有在程序运行后才知道要开辟多少空间给某个变量,而这些已经写死大小的内存就不符合我们的愿景了,所以我们需要动态内存管理,下面我们就对动态内存管理展开说说!
下面所讲的函数均处于 stdlib.h 库中


一、malloc函数

malloc函数是C语言中一个用来开辟内存的函数

void* malloc(size_t size)
  • 参数 :
    size 指定需要分配的内存大小,单位为字节;size_t 是一个无符号整数类型,通常用于表示大小
  • 返回值:
    1. 如果开辟成功,则返回一个指向开辟好空间的指针
    2. 如果开辟失败,则返回一个NULL 指针,因此malloc的返回值一定要做检查

注:返回值的类型是void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自
己来决定;如果参数size 为0,malloc的行为是标准是未定义的,取决于编译器

#include <stdio.h>
#include <stdlib.h>int main() {int* arr = NULL;int* tmp = (int*)malloc(sizeof(int) * 10);if (tmp == NULL) {perror("main()::malloc()");}else {arr = tmp;}free(arr);return 0;
}

这里我们就使用了malloc开辟了一块大小为40Byte的内存空间


二、calloc函数

calloc函数是C语言中用于动态分配内存的另一个重要函数,它与malloc类似,但在分配内存后会自动初始化为0

void* calloc(size_t num, size_t size);
  • 参数:
    num:分配的元素个数
    size:每个元素的大小
  • 返回值
    1. 如果开辟成功,则返回一个指向开辟好空间的指针
    2. 如果开辟失败,则返回一个NULL 指针,因此calloc的返回值一定要做检查

malloc 与 calloc 的唯一区别是 calloc 会初始化开辟的空间,用法与 malloc 一样


三、realloc函数

如果我们前面使用了 malloc 或则 calloc 函数开辟了空间,但是我们发现开辟的空间不够用了,还想开辟多一点,或则说发现开辟大了,想缩小,那么我可以使用 realloc 函数,它可以改变之前分配的内存块的大小

void* realloc(void* ptr, size_t size);
  • 参数:
    ptr:指向之前分配的内存块的指针,如果ptr为NULL,realloc的行为等同于malloc
    size:新的内存块的大小(以字节为单位)
  • 返回值:
    1. 如果调整成功,返回指向新分配的内存的指针
    2. 如果调整失败,则返回一个NULL 指针,原内存块不变

对于realloc调整成功返回的指针,分两种情况:

  1. 情况一: 原有内存后面足够多的剩余空间用于拓展,则在原有的空间后面直接拓展,并返回prt指针
  2. 情况二: 原有内存后面没有足够多的剩余空间用于拓展,扩展的方法是: 在堆空间上另找一个合适大小的连续空间来使用,这样函数返回的是一个新的内存地址

在这里插入图片描述

四、free函数

在C语言的库中,专门提供了一个free函数将开辟出来的动态内存释放掉的,函数原型如下:

void free (void* ptr);

注:

  • 如果参数ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的
  • 如果参数ptr 是NULL指针,则函数什么事都不做
#include <stdio.h>
#include <stdlib.h>int main() {int* arr = NULL;int* tmp = (int*)malloc(sizeof(int) * 10);if (tmp == NULL) {perror("main()::malloc()");}else {arr = tmp;}free(arr);return 0;
}

如上,free释放了malloc开辟的动态内存

为什么需要释放内存

动态内存是由程序员开辟的,如果使用完之后不进行内存的释放,那么内存有可能导致堆积,内存泄露的风险,但是free不能对非动态内存进行释放,不然程序会报错


End

对于动态内存管理,我们就将到这里,关于动态内存管理,还有一个拓展点叫做柔性数组,这里我不在多讲啦,如果大家有兴趣可以自己百度一下!


文章转载自:

http://rZZ0bD5U.gwjnm.cn
http://dZpbO2DN.gwjnm.cn
http://riEmU8FQ.gwjnm.cn
http://fzKqQ5fy.gwjnm.cn
http://oAyHqFnf.gwjnm.cn
http://oGDCju7v.gwjnm.cn
http://lQojrRLZ.gwjnm.cn
http://j2s9Ta94.gwjnm.cn
http://NcjxGDBW.gwjnm.cn
http://epjdALeK.gwjnm.cn
http://gvoMv7df.gwjnm.cn
http://6Y5J5okC.gwjnm.cn
http://CJXla45g.gwjnm.cn
http://Mirxzbv2.gwjnm.cn
http://M6mZr5hC.gwjnm.cn
http://yWK8oWTk.gwjnm.cn
http://EHbKMKdR.gwjnm.cn
http://qFiE5A0z.gwjnm.cn
http://S1w4ev5n.gwjnm.cn
http://oMIk9CJE.gwjnm.cn
http://UZHnH6t4.gwjnm.cn
http://5hiSju5Q.gwjnm.cn
http://GoonvcWs.gwjnm.cn
http://zxPlsdtj.gwjnm.cn
http://bi5YMJ9d.gwjnm.cn
http://qNCbf23n.gwjnm.cn
http://hCnTLnNq.gwjnm.cn
http://bWsFyP3i.gwjnm.cn
http://bOxRNGXC.gwjnm.cn
http://zfcIPUwS.gwjnm.cn
http://www.dtcms.com/wzjs/630439.html

相关文章:

  • 包头网站制作 建设帮人家做网站维护
  • 医疗网站织梦天猫商城创建时间
  • 扁平化网站导航ui模板wordpress胖子马
  • 网站推广自己可以做吗中建国际建设有限公司官网是央企吗
  • 湖北住房建设网站长春 行业网站
  • 免费用搭建网站深圳网站推广活动方案
  • 重庆网站排名公司微盟小程序官网
  • 做网站空间不给账号密码河北网站建设市面价
  • 重庆it培训机构简单建优化网站无需技术
  • 网站建设快照优化创建手机网站
  • 广州做网站信息做水暖的网站
  • 用html做登录网站crm客户管理系统模板
  • html5网站开发参考文献企业网站内容
  • 网站seo属于什么专业软件界面设计的原则
  • 网站没内容哪个公司网络最好
  • 免费做二维码网站镇江做网站公司
  • 帆布网站做哪个wordpress商城分銷
  • 用html做网站步骤公众号如何导入wordpress
  • 电商网站开发主要设计内容搜索引擎排名google
  • 电子毕业设计代做网站拼多多网站
  • 做网站新闻移动动态旅游网站制作代码
  • 好的flash网站网站设计设计方案
  • 微商货源网站源码大兴安岭地网站seo
  • 网站被百度收录手机网站 input
  • 网站排名优化方法要综合考虑哪些因素?
  • 网站浏览量怎么查看镇巴作风建设网站
  • 广州大型网站建设九牛科技网站开发微信营销
  • 中山台州网站建设推广wordpress怎么登录
  • 免费试用平台网站源码什么软件可以做app
  • 网站建设数据收集方法永久免费自助建站