KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm having a problem with free() on a struct in my C program. When I look at /proc//statm before and after the free it doesn't seem to reduce. Am I using free() wrong in this case, or am I reading /proc//statm wrong? Here is a test case which yields the problem: 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(); } The output is: Memory usage: Data = 278528 Memory usage: Data = 282624 Memory usage: Data = 282624 When I would expect it to be: Memory usage: Data = 278528 Memory usage: Data = 282624 Memory usage: Data = 278528 I've done a similar test with malloc'ing a (char *), then free'ing it and it works fine. Is there something special about structs?
Tags (comma-separated)
Save Edits
Cancel