指针和内存管理



一、静态内存分配
    在编译时确定大小,程序运行的适当的时候(函数调用)分配确定大小的空间,用完由OS在函数调用结束时统一释放

    优点:无需人工参与,分配效率高
    缺点:内存的浪费,内存使用率低,
                        内存分配只能是按计划分配。

二、动态内存分配
    在程序运行中确定大小,随时申请,随时释放的内存分配

    优点:节约内存,内存使用率高,能够做到按需分配
    缺点:需要手动管理(申请和释放),分配效率低,
                        分配时可能会失败,失败时要做异常处理。

    动态内存分配的空间在堆中
    作用域:凡是能够找得到该空间的地方
    生命周期:从申请到释放

    风险:
    1、忘记释放,会造成【内存泄漏】
    2、过早释放,会造成【提前释放】
    3、多次释放,会造成【重复释放】

    分配的大小单位是字节
    申请:malloc
        char *p=(char *)malloc(strlen(s)+1);  
    释放:free

三、全局变量
    定义:定义在函数外面的变量,也叫外部变量
    作用域:所有源文件
    生命周期:整个程序的运行周期

    优点:避免复杂的传参,全局都可访问
    缺点:降低内存使用率;
                        全局都可修改,出错不易定位;
                        增强代码的耦合度

    建议:尽量少用


练习:
1、仿照strdup实现一个mystrdup
2、仿照strcat实现一个mystrcat
    






posted @ 2015-06-19 16:08  天使雨儿  阅读(143)  评论(0编辑  收藏  举报