У меня проблема с 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
Когда я ожидаю, что это будет:
Memory usage: Data = 278528
Memory usage: Data = 282624
Memory usage: Data = 278528
Я провел аналогичный тест с malloc'ом (char *), затем освободил его, и он отлично работает. Есть что-то особенное в структурах?