基础Day10(内存结构)

全局变量和局部变量
基础Day10(内存结构)_第1张图片
基础Day10(内存结构)_第2张图片
基础Day10(内存结构)_第3张图片
静态、声明、函数
基础Day10(内存结构)_第4张图片
基础Day10(内存结构)_第5张图片

static 修饰的变量只能在一个文件中使用
声明
基础Day10(内存结构)_第6张图片
在这里插入图片描述
基础Day10(内存结构)_第7张图片
在这里插入图片描述
作用域和声明周期
基础Day10(内存结构)_第8张图片
内存四区模型
代码区:程序指令
数据区:(静态区 全局区)(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,电脑不会死机。
递归会导致程序崩溃,原因是栈溢出。

数据存储范围和内存存储方向
基础Day10(内存结构)_第9张图片
基础Day10(内存结构)_第10张图片
基础Day10(内存结构)_第11张图片
数据区:未初始化的静态局部变量、初始化的静态局部变量、未初始化的全局变量、初始化的全局变量、未初始化的静态全局变量、初始化的静态全局变量、字符串常量
栈区:初始化的局部变量、未初始化的数组、初始化的数组、未初始化的指针、初始化的指针、字符数组、常量
基础Day10(内存结构)_第12张图片
开辟堆空间和堆空间常见错误
基础Day10(内存结构)_第13张图片
在这里插入图片描述
基础Day10(内存结构)_第14张图片
基础Day10(内存结构)_第15张图片

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

你可能感兴趣的:(基础Day10(内存结构))