Проблема с free () в структурах в C. Это не уменьшает использование памяти

У меня проблема с free () в структуре в моей программе на языке C. Когда я смотрю на / proc // statm до и после бесплатного, кажется, что он не уменьшается. Я неправильно использую free () в этом случае, или я неправильно читаю / proc // statm?

Вот тестовый пример, в котором возникает проблема:

struct mystruct {
    unsigned int arr[10000];
};

void mem() {
    char buf[30];
    snprintf(buf, 30, "/proc/%u/statm", (unsigned)getpid());
    FILE* pf = fopen(buf, "r");
    if (pf) {
        unsigned size; //       total program size
        unsigned resident;//   resident set size
        unsigned share;//      shared pages
        unsigned text;//       text (code)
        unsigned lib;//        library
        unsigned data;//       data/stack
        unsigned dt;//         dirty pages (unused in Linux 2.6)
        fscanf(pf, "%u %u %u %u %u %u", &size, &resident, &share, &text, &lib,         &data);
        printf("Memory usage: Data = %d\n", data*sysconf(_SC_PAGESIZE));
    }
    fclose(pf);
}

int main(int argc, char **argv) {
    mem();
    struct mystruct *foo = (struct mystruct *)malloc(sizeof(struct mystruct));
    mem();
    free(foo);
    mem();
}

Результат:

Memory usage: Data = 278528
Memory usage: Data = 282624
Memory usage: Data = 282624

Когда я ожидал этого to be:

Memory usage: Data = 278528
Memory usage: Data = 282624
Memory usage: Data = 278528

Я проделал аналогичный тест с использованием malloc'а (char *), затем его освобождения, и он отлично работает. Есть ли что-то особенное в структурах?

8
задан oprimus 14 May 2011 в 23:05
поделиться