free的内存何时归还给系统
时间:2010-08-26
来源:互联网
如下代码在执行完free之后,内存会交还给系统,也就是说used在free()之后会减少很多;
如果把#if 1 改成 #if 0,则内存似乎没有还给系统。这是什么原因呢。
复制代码
如果把#if 1 改成 #if 0,则内存似乎没有还给系统。这是什么原因呢。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- #if 1
- #define MALLOC_BLOCK_COUNTS 1024
- #define MALLOC_BLOCK_SIZE (2 * 1024 * 1024)
- #else
- #define MALLOC_BLOCK_SIZE 1024
- #define MALLOC_BLOCK_COUNTS (2 * 1024 * 1024)
- #endif
-
- static char *ptr[MALLOC_BLOCK_COUNTS];
-
- int
- main(int argc, char **argv)
- {
- long long i, j;
-
- memset(ptr, 0x0, sizeof(ptr));
- for (i = 0; i < MALLOC_BLOCK_COUNTS; i++) {
- ptr[i] = malloc(MALLOC_BLOCK_SIZE);
- if (ptr[i] == NULL) {
- perror("malloc()");
- exit(-1);
- }
-
- for (j = 0; j < MALLOC_BLOCK_SIZE; j++) {
- *(ptr[i] + j) = j % 256;
- }
- }
-
- for (i = 0; i < MALLOC_BLOCK_COUNTS; i++) {
- free(ptr[i]);
- }
-
- printf("ok\n");
- sleep(1000);
- return 0;
- }
作者: bigcren 发布时间: 2010-08-26
QUOTE:
如下代码在执行完free之后,内存会交还给系统,也就是说used在free()之后会减少很多;
如果把#if 1 改成 #i ...
bigcren 发表于 2010-08-26 09:08
如果把#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
davelv 发表于 2010-08-26 09:37
你再看看
作者: egmkang 发布时间: 2010-08-26
本帖最后由 davelv 于 2010-08-26 10:39 编辑
OMG,看错了。。
测试了下,在我的系统上两者情况基本一致,没有出现楼主说的情况。
QUOTE:
你再看看
egmkang 发表于 2010-08-26 09:47
egmkang 发表于 2010-08-26 09:47
OMG,看错了。。
测试了下,在我的系统上两者情况基本一致,没有出现楼主说的情况。
作者: davelv 发布时间: 2010-08-26
楼主想过什么叫内存碎片没?你这种就是。你还可以将size定为1个字节,更碎
作者: blackuhlan 发布时间: 2010-08-26
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28