在说之前声明为本人总结,可以希望大家有不同的问题?和知识可以相互讨论。
栈区内存在代码当中内容一般是可以被读取和修改的,我们一般声明的指针变量还有普通变量,基本上都在栈区里面,代码读写速度快,但内存小
函数也是在栈区,基本上调用完,会释放空间:如果我们要改一些变量和常量在栈区是可以被修改的
堆区的话一般为我们手动操控,内存大,可修改,代码书写速度相对于在栈区慢,一般的为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后面会发布新的学习内容)
希望大家能够一起加油!
1123

被折叠的 条评论
为什么被折叠?



