鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

合理规划存储空间,做好预留,减少动态内存的重新分配

【说明】 频繁申请释放内存,不仅效率低,而且易造成内存碎片,对于确定性用途的内存,建议一次申请,多次使用。

【原理】 通过空间换时间,预留一定的内存空间,减少了频繁申请释放内存锁消耗的时间。

【注意事项】 提前预留规格,减少动态内存,则可能导致内存的利用率降低,需要在空间与时间之间做好权衡。

【案例】

优化前
typedef struct{
    int filed[0x10000];
    int sum;
}DemoStru;

int FuncDoSomeThing() 
{
    DemoStru *local;
    
    local = malloc(sizeof(DemoStru));
    if(local == NULL) {
        return -1;
    }
    
    ...
    
    free(local);    
    return 0;
}

int mainFunc()
{
    for (int i = 0; i < 1000; ++i) {
        (void)FuncDoSomeThing();
    }
}

说明:上述FuncDoSomeThing函数被频繁调用,频繁申请释放效率较低。

优化后
typedef struct{
    int filed[0x10000];
    int sum;
}DemoStru;

int FuncDoSomeThing(DemoStru* local) 
{
    ...
    return 0;
}

int mainFunc(int *input, int size)
{
    DemoStru *local;
    
    local = malloc(sizeof(DemoStru));
    if(local == NULL) {
        return -1;
    }

    for(int i=0; i<1000; i++) {
        (void)FuncDoSomeThing(local);
    }
    
    free(local);
}

说明:内存一次申请,在流程中多次使用,减少了申请释放过程。