QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1096|回复: 1

能帮忙看看吗?测试内存分配和释放的程序

[复制链接]
发表于 2006-7-21 13:49:19 | 显示全部楼层 |阅读模式
[code:1]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct NODE
{
    char *ps;
    char *pos;
    char *exp;
    struct NODE *pre, *next;
}WNODE;

void delay(int seconds)
{
    time_t goal = time(NULL) + seconds;
    do
    {
        //do nothing
    }while(time(NULL) < goal);
}

int main()
{
    WNODE word[30000];
    int i = 0;
   
    while(1)
    {
        for(i=0; i<30000; i++)
        {
            word[i].ps = (char *)malloc(sizeof(char) * 1000);
            word[i].pos = (char *)malloc(sizeof(char) * 1000);
            word[i].exp = (char *)malloc(sizeof(char) * 1000);
        }
        delay(10);
       
        for(i=0; i<30000; i++)
        {
            free(word[i].ps);
            free(word[i].pos);
            free(word[i].exp);
        }
            
        delay(10);
        printf("====================\n");
    }
    return 0;
}[/code:1]
我用上面的程序测试内存与释放,可以看到结果:一会80M,一会600K。
但是换为下面的程序为什么就不行了。一直是80M
[code:1]int main()
{
    WNODE *word[30000];
    int i = 0;
   
    while(1)
    {
        for(i=0; i<30000; i++)
        {
                    word[i] = (WNODE *)malloc(sizeof(WNODE));
            word[i]->ps = (char *)malloc(sizeof(char) * 1000);
            word[i]->pos = (char *)malloc(sizeof(char) * 1000);
            word[i]->exp = (char *)malloc(sizeof(char) * 1000);
        }
        delay(10);
       
        for(i=0; i<30000; i++)
        {
            free(word[i]->ps);
            free(word[i]->pos);
            free(word[i]->exp);
                    free(word[i]);
        }
            
        delay(10);
        printf("====================\n");
    }
    return 0;
}[/code:1]
 楼主| 发表于 2006-7-21 13:59:47 | 显示全部楼层
第一个程序,一会400K,一会80M ,内存曲线是很规则的梯形
第二个程序,一直是80M,内存曲线是直线
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 10:24 , Processed in 0.058549 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表