Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  C语言  >  正文 浅析动态内存分配Malloc二元操作性能教程

浅析动态内存分配Malloc二元操作性能教程

发布时间:2018-09-24   编辑:www.jquerycn.cn
jquery中文网为您提供浅析动态内存分配Malloc二元操作性能教程等资源,欢迎您收藏本站,我们将为您提供最新的浅析动态内存分配Malloc二元操作性能教程资源
malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。

在浅析之前先看下 malloc的原型:

void* malloc(size_t size);

这里唯一需要注意到是:

typedef unsigned int size_t;

来段测试程序

#include < stdio.h > int main(int argc, char * argv[]) {
 int i = 0;
 for (; i < 100; i ) {
  malloc(32);
  /**< 每次malloc 32 字节 */
 }
 return 0;
}

编译后,看下内存泄漏:

内存泄露

 

内存泄露

和预计的没错,正好泄漏32*100 bytes

我们放大循环次数和修改,看下运行时间:

int i = 0;
for (; i < 1000000; i ) {
 malloc(1000);
 /**< 每次malloc 1000 字节 */
}

 

real 7.366s

我们这次加大循环次数并且malloc后顺便free掉看看结果:

12345

int i = 0;
for (; i < 1000000; i ) {
 int * mm = malloc(1000);
 /**< 每次malloc 1000 字节 */
 free(mm);
}

结果显示如下:

内存泄露

 

内存泄露

也和预计的一样,二元操作,内存显示正常,

再来看看和第一次相同的循环(100W)浪费多少时间:

real 0.047s

可以看出,是否可以认为内存泄漏直接了影响性能?,且慢,继续看下面

还是和第一个例子相同,如果我们最后一起free掉所有内存,也就没有内存泄漏了,那看看性能如何?

int i = 0;
void * szMM[1000000];
for (; i < 1000000; i ) {
 szMM[i] = malloc(1000);
 /**< 每次malloc 1000 字节 */
}
for (i = 0; i < 1000000; i ) {
 free(szMM[i]);
}

 

无任何内存泄漏,但是运行时间!!

real 9.690s

时间和第一次差不多长,三次测试结果说明什么?

说明性能和内存泄漏没直接关系,第一和第三都有共同的特点,malloc的内存 每次1000bytes 循环100W 不停的累计.而第二个例子是每次malloc都会free掉.,没有释放的内存的最大数量影响了整个程序的性能!

您可能感兴趣的文章:
浅析动态内存分配Malloc二元操作性能教程
malloc/free和new/delete对比
深入解读 C/C 内存管理需要注意的问题
golang runtime 简析
了解 C 语言中的指针和内存泄漏及如何避免
Go语言——代码内存机制
jQuery源码分析系列
为 lua 配一个合适的内存分配器及一些想法及实践
php中的内存管理的介绍
我所理解的链表1

[关闭]