У меня проблема с 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 *), затем его освобождения, и он отлично работает. Есть ли что-то особенное в структурах?