MemmoryDistribution

内存分布

1、内存空间的划分:全局区、静态区、栈区、堆区、常量区、数据区

​ 全局区:在main函数外边定义的变量存储在全局区

​ 静态区:使用static修饰的变量在静态区

​ 栈区:在局部定义的变量,在栈区

​ 堆区:堆区的空间,手动申请,手动释放

​ 常量区:存放常量

​ 数据区:存放代码

2、使用malloc函数申请空间,使用free函数释放空间

1
2
3
4
5
6
7
#include <stdlib.h>
void *malloc(size_t size);
功能:申请空间(连续的)
参数:
size:具体要申请空间的大小
返回值:
申请到的空间的首地址,一般需要接受malloc的返回值,并且函数需要在调用的时候强转

3、释放空间

1
2
3
4
5
6
void free(void *ptr);
功能:释放空间
参数:
ptr:具体释放空间的首地址
返回值:

4、字符串函数

1)strlen

1
2
3
4
5
6
7
#include <string.h>
size_t strlen(const char *s);
功能:计算一个字符串的长度
参数:
s:具体的字符串
返回值:
字符串的长度

注意:strlen计算字符串长度时,遇\0结束,长度不包括\0

2)strcpy

1
2
3
4
5
6
7
8
#include <string.h>
char *strcpy(char *dest, const char *src);
功能:将src赋值给dest
参数:
dest:目的字符串
src:源的字符串
返回值:
复制后的字符串

注意:在将src的数据复制给dest的时候,也会将src的’\0’一起复制过去

3)strcat

需要保证s1足够大,否则会内存溢出

将s2的数据追加到s1的后面,从s1的\0的位置开始进行追加strcat(s1, s2);