0

我用aio写了一个测试程序,但是我发现当写数据的主进程结束时,我的进程的内存使用率从来没有下降过。任何人都可以就我的程序问题或aio缓存提供一些提示吗?

我的程序:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <aio.h>

FILE *db_file;

void aio_completion_handler(sigval_t sigval)
{
    int ret;
    struct aiocb *pb;  

    pb = (struct aiocb *)sigval.sival_ptr;  
    if ((ret = aio_return(pb)) > 0) {}

    printf((char*)pb->aio_buf);
    free((void*)pb->aio_buf);
    free((void*)pb);
}

int write_1000W()
{
    for(int i = 0; i < 10000000; ++i)
    {
        char *buf;
        const int BUFLEN = 1024*1024;
        struct aiocb *pb;

        buf = (char*)malloc(BUFLEN);
        bzero((void*)buf, BUFLEN);
        pb = (struct aiocb*)malloc(sizeof(struct aiocb));
        bzero((void*)pb, sizeof(struct aiocb));

        sprintf(buf, "{%d %d %d}\n", i, i, i);

        pb->aio_buf = buf;
        pb->aio_fildes = fileno(db_file);
        pb->aio_nbytes = strlen(buf);
        pb->aio_offset = 0;

        pb->aio_sigevent.sigev_notify = SIGEV_THREAD;
        pb->aio_sigevent._sigev_un._sigev_thread._function = aio_completion_handler;
        pb->aio_sigevent._sigev_un._sigev_thread._attribute = NULL;
        pb->aio_sigevent.sigev_value.sival_ptr = pb;

        if (aio_write(pb) < 0)
        {   
            free(buf);
            free(pb);
        }
    }
}

int main()
{
    db_file = fopen ("./1000W.txt", "a+");
    if(!db_file)
    {
        printf("Cannot open file for append.\n");
        exit(1);
    }
    write_1000W();
    printf("0000000000000\n");
    sleep(300);
    return 0;
}

内存使用量上升到 4G 以上(有时 3G,可能会发生变化),但mallocandfree函数都运行了 10,000,000 次,所以我认为它没有内存泄漏问题。

4

0 回答 0