opr*_*mus 8 c malloc free struct memory-management
我在C程序中的结构上遇到free()问题.当我在免费之前和之后查看/ 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();
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Memory usage: Data = 278528
Memory usage: Data = 282624
Memory usage: Data = 282624
Run Code Online (Sandbox Code Playgroud)
当我期望它是:
Memory usage: Data = 278528
Memory usage: Data = 282624
Memory usage: Data = 278528
Run Code Online (Sandbox Code Playgroud)
我用malloc'ing a(char*)进行了类似的测试,然后将其释放并且工作正常.结构有什么特别之处吗?
Dig*_*oss 13
你的回答就在Stack Overflow上,但简短的版本是,由于很好的理由,内存分配器不会将内存返回给主机操作系统,而是将其保存(在程序的数据空间内部)作为一些空闲列表类.
库保留内存的一些原因是: