合理规划存储空间,做好预留,减少动态内存的重新分配
【说明】 频繁申请释放内存,不仅效率低,而且易造成内存碎片,对于确定性用途的内存,建议一次申请,多次使用。
【原理】 通过空间换时间,预留一定的内存空间,减少了频繁申请释放内存锁消耗的时间。
【注意事项】 提前预留规格,减少动态内存,则可能导致内存的利用率降低,需要在空间与时间之间做好权衡。
【案例】
优化前:
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);
}
说明:内存一次申请,在流程中多次使用,减少了申请释放过程。
父主题: 内存