对栈区堆区和对字符串,只读区,malloc,free,简单了解和应用

AI助手已提取文章相关产品:

在说之前声明为本人总结,可以希望大家有不同的问题?和知识可以相互讨论。

栈区内存在代码当中内容一般是可以被读取和修改的,我们一般声明的指针变量还有普通变量,基本上都在栈区里面,代码读写速度快,但内存小

函数也是在栈区,基本上调用完,会释放空间:如果我们要改一些变量和常量在栈区是可以被修改的

堆区的话一般为我们手动操控,内存大,可修改,代码书写速度相对于在栈区慢,一般的为malloc和new申请的内存空间,这里的空间内容也是可以允许修改的,//本人对算法不太了解,能感觉好用的一点是:当我们的不知道要存储的数据,字符串的数量长度都不确定,都可以动态修改的,没有内存的浪费,缺点的话就是,需要手动管理

只读区的话是字符串常量,const常量:权限的话是只读,(这是可能有些抽象下面我会展示一虚下代码)生命周期的话是:程序运行全程存在。

下面展示为什么是只读

char *str ="nihaoya";

这个是不能够修改的原因:首先,我们有一个char类型指针str变量在栈里面,而指针的作用我们也知道是指向地址的,而"nihaoya",这个就是我们指针指向的目标地址。而它是一个字符串,在只读区,我们指向的只是它的地址,而不是能够让他拷贝到我们的栈区里面,是无法修改的

比如我们的栈区

char arr[]="nihaoya";

是不是可以修改,通过我们的下标来修改,

比如我们的堆区

堆区前面说不是手动开辟的空间嘛,

char *arr=malloc(strlen("nihaoya")+1);你们可以说一下为什么我这要加上1。

我们开辟完空间,当然要拷贝进去数据也就是把我们的字符串地址放入到我们的堆区,

strcpy(arr,"nihaoya");//因为arr==arr[0]都是我们的首地址

这样我们也可以通过下标来修改了,!!!要注意的是我们在用完堆的空间后,一定要注意释放内存空间的,不然的话就会内存泄漏,我们在栈区内存因为调用完后是自动销毁的,而在堆区我们手动的也要free(arr)释放掉,不然的话这段内存是一直存在到程序结束的,别人用不了的

举一个例子吧,我们在嵌入式开发当中我们使用的按键一般是一直检测循环,如果说每循环一次就会多一个内存,这样就会导致我们最终内存不够,程序崩溃。

通过上面的解释,大家也差不多了解malloc可以申请内存空间了吧,注意一定要释放搭配free使用

可以加一个if(...!==NELL),然后释放free(.....)

非常感谢大家的支持,喜欢的可以求一个赞来支持我一个新博主,会持续更新的如果哪天没有更新希望你能来骂醒我,(我打算从事嵌入式开发路线,等c后面会发布新的学习内容)

希望大家能够一起加油!

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C Yu小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值