+ -
当前位置:首页 → 问答吧 → free的内存何时归还给系统

free的内存何时归还给系统

时间:2010-08-26

来源:互联网

如下代码在执行完free之后,内存会交还给系统,也就是说used在free()之后会减少很多;
如果把#if 1 改成 #if 0,则内存似乎没有还给系统。这是什么原因呢。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #if 1
  5. #define MALLOC_BLOCK_COUNTS 1024
  6. #define MALLOC_BLOCK_SIZE  (2 * 1024 * 1024)
  7. #else
  8. #define MALLOC_BLOCK_SIZE 1024
  9. #define MALLOC_BLOCK_COUNTS  (2 * 1024 * 1024)
  10. #endif

  11. static char *ptr[MALLOC_BLOCK_COUNTS];

  12. int
  13. main(int argc, char **argv)
  14. {
  15.     long long i, j;

  16.     memset(ptr, 0x0, sizeof(ptr));
  17.     for (i = 0; i < MALLOC_BLOCK_COUNTS; i++) {
  18.         ptr[i] = malloc(MALLOC_BLOCK_SIZE);
  19.         if (ptr[i] == NULL) {
  20.             perror("malloc()");
  21.             exit(-1);
  22.         }

  23.         for (j = 0; j < MALLOC_BLOCK_SIZE; j++) {
  24.             *(ptr[i] + j) = j % 256;
  25.         }
  26.     }

  27.     for (i = 0; i < MALLOC_BLOCK_COUNTS; i++) {
  28.         free(ptr[i]);
  29.     }

  30.     printf("ok\n");
  31.     sleep(1000);
  32.     return 0;
  33. }
复制代码

作者: bigcren   发布时间: 2010-08-26



QUOTE:
如下代码在执行完free之后,内存会交还给系统,也就是说used在free()之后会减少很多;
如果把#if 1 改成 #i ...
bigcren 发表于 2010-08-26 09:08




    你怎么知道没有退还给系统?

作者: pengjianbokobe   发布时间: 2010-08-26

额,你改成#if 0 ,那端代码就没有编译 --!

作者: davelv   发布时间: 2010-08-26



QUOTE:
额,你改成#if 0 ,那端代码就没有编译 --!
davelv 发表于 2010-08-26 09:37



你再看看

作者: egmkang   发布时间: 2010-08-26

本帖最后由 davelv 于 2010-08-26 10:39 编辑


QUOTE:
你再看看
egmkang 发表于 2010-08-26 09:47


OMG,看错了。。

测试了下,在我的系统上两者情况基本一致,没有出现楼主说的情况。

作者: davelv   发布时间: 2010-08-26

楼主想过什么叫内存碎片没?你这种就是。你还可以将size定为1个字节,更碎

作者: blackuhlan   发布时间: 2010-08-26