指针和内存管理
一、静态内存分配
在编译时确定大小,程序运行的适当的时候(函数调用)分配确定大小的空间,用完由OS在函数调用结束时统一释放
优点:无需人工参与,分配效率高
缺点:内存的浪费,内存使用率低,
内存分配只能是按计划分配。
二、动态内存分配
在程序运行中确定大小,随时申请,随时释放的内存分配
优点:节约内存,内存使用率高,能够做到按需分配
缺点:需要手动管理(申请和释放),分配效率低,
分配时可能会失败,失败时要做异常处理。
动态内存分配的空间在堆中
作用域:凡是能够找得到该空间的地方
生命周期:从申请到释放
风险:
1、忘记释放,会造成【内存泄漏】
2、过早释放,会造成【提前释放】
3、多次释放,会造成【重复释放】
分配的大小单位是字节
申请:malloc
char *p=(char *)malloc(strlen(s)+1);
释放:free
三、全局变量
定义:定义在函数外面的变量,也叫外部变量
作用域:所有源文件
生命周期:整个程序的运行周期
优点:避免复杂的传参,全局都可访问
缺点:降低内存使用率;
全局都可修改,出错不易定位;
增强代码的耦合度
建议:尽量少用
练习:
1、仿照strdup实现一个mystrdup
2、仿照strcat实现一个mystrcat