嵌入式Day06(2024.3.19)
c语言内存分配
变量在内存中的分配
内存段 | 作用 |
---|---|
栈区 | 存放局部变量,函数参数,只能在函数内部使用 |
堆区 | 可以使用malloc和free申请的空间 |
.data | 存放已经初始化的全局变量、静态变量 |
.bss | 存放未初始化的全局变量、静态变量 |
.rodata | 只读数据区,存放一些常量,如字符串等(字符串是常量) |
.text | 存放一些可执行的代码 |
static的使用
修饰对象 | 作用 |
---|---|
局部变量 | 在程序编译时就为该变量分配空间,并对其进行初始化。延长该变量的生命周期,在.bss和.data分配空间 |
全局变量和函数 | 限制全局变量和函数的使用范围,让其只能在本文件中使用,其他文件不能使用 |
堆区内存
malloc函数
头文件:stdlib.h
函数原型:void *malloc(size_t size);
功能: 从堆区申请块大小为size 字节的内存
返回值:成功返回一个指针,指向这块内存的首地址(一般需要强制转型),失败返回NULL
free函数
头文件:stdlib.h
函数原型: void free(void *ptr);
功能:释放通过malloc申请的内存,参数为要释放内存的首地址
返回值:无
#include<stdio.h>
#include<stdlib.h>
int main(){
int * p = (int *)malloc(sizeof(int)*1);
*p = 2024;
printf("p 指向地址 %#x \n",p);
printf("*p = %d\n",*p);
free(p);
return 0;
}
root@wangjudealy:/learn# ./a.out
p 指向地址 0x9cbdb2a0
*p = 2024
memset函数
头文件:string.h
函数原型: void *memset(void *s, int c, size_t n);
功能:把 s指向的内存的前n个字节全部置为c
返回值:成功返回s所指向的地址,失败返回NULL
内存泄露
指在编写程序时只有malloc却没有对应的free。