基础Day10(内存结构)

全局变量和局部变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
静态、声明、函数
在这里插入图片描述
在这里插入图片描述

static 修饰的变量只能在一个文件中使用
声明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
作用域和声明周期
在这里插入图片描述
内存四区模型
代码区:程序指令
数据区:(静态区 全局区)(Linux系统编程会将数据区拆开讲解)
(1)初始化数据
1)、初始化的全局变量
2)、初始化的静态全局变量
3)、初始化的静态局部变量
(2)未初始化数据
1)、未初始化的静态局部变量 默认初始值为0
2)、未初始化的全局变量 默认初始值为0
3)、未初始化的静态全局变量 默认初始值为0
(3)字符串常量
(4)define定义的常量存在数据区
栈区:局部变量、数组、结构体、指针、枚举、函数形参、常量(const)等
栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此局部变量的生存周期为申请到释放该段栈空间。栈区大小:在不同的操作系统中系统分配给每一个程序的栈区空间大小不同,一般Windows是18M不等,一般Linux是116M不等。1024*1024BYTE。
堆区:音频文件、视频文件、图像文件、文本文件、大的数据等。
开辟堆空间malloc(大小)
堆是一个大容器,它的容量远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
注意:如果在程序中创建大的数据应该放在堆区。
死循环不会占满内存,会占满CPU,电脑不会死机。
递归会导致程序崩溃,原因是栈溢出。

数据存储范围和内存存储方向
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
数据区:未初始化的静态局部变量、初始化的静态局部变量、未初始化的全局变量、初始化的全局变量、未初始化的静态全局变量、初始化的静态全局变量、字符串常量
栈区:初始化的局部变量、未初始化的数组、初始化的数组、未初始化的指针、初始化的指针、字符数组、常量
在这里插入图片描述
开辟堆空间和堆空间常见错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

误区
1、
在这里插入图片描述
在这里插入图片描述
2、
在这里插入图片描述
在这里插入图片描述
堆空间冒泡排序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对空间操作字符串
memset()
#include<string.h>
void *memset(void *s,int c,size_t n);
功能:将s的内存区域的前n个字节以参数c填入
参数:s:需要操作内存s的首地址
c:填充的字符,c虽然参数int,但必须是unsigned char,范围为0~25
n:指定需要设置的大小
返回值:s的首地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
内存处理函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
memcpy()
#include<string.h>
void *memcpy(void *dest,const void *src,size_t n);
功能:拷贝src所指的内存内容的前n个字节到dest所指的内存地址上。
参数:dest:目的内存首地址
src:源内存首地址,注意:dest和src所指的内存空间不可重叠
n:需要拷贝的字节数
返回值:dest的首地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
memmove()
memmove()功能用法和memcpy()一样,区别在于:dest和src所指的内存空间重叠时,memmove()仍然能处理,不过执行效率比memcpy()低些。
memcmp()
#include<string.h>
int memcmp(const void *s1,const void *s2,size_t n);
功能:比较s1和s2所指向内存区域的前n个字节
参数:s1:内存首地址1
S2:内存首地址2
n:需比较的前n个字节
返回值:相等:=0
大于:>0
小于:<0
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值