zoukankan      html  css  js  c++  java
  • 指针和内存管理



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

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

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

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

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

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

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

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

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

        建议:尽量少用


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






  • 相关阅读:
    BZOJ
    Codeforces
    GYM
    UOJ
    Java集合之Queue
    【HIHOCODER 1478】 水陆距离(BFS)
    Java集合之Stack
    Java集合之Vector
    Java多线程入门Ⅱ
    【HIHOCODER 1604】股票价格II(堆)
  • 原文地址:https://www.cnblogs.com/rainwz/p/4589000.html
Copyright © 2011-2022 走看看