似乎即使我释放了由malloc()分配的Linux进程的所有内存之后,内存仍然为该进程保留,并且没有返回给OS。
默认情况下运行valgrind massif工具不会泄漏。
使用--pages-as-heap = yes运行valgrind会显示以下内容:
-> 13.77%(7,655,424B)0x35FEEEB069:brk(brk.c:31)
-> 13.77%(7,655,424B)0x35FEEEB113:sbrk(sbrk.c:53)
-> 13.77%(7,655,424B)0x35FEE82717:__default_morecore(morecore.c:48)
-> 13.77%(7,655,424B)0x35FEE7DCCB:_int_malloc(malloc.c:2455)
-> 13.77%(7,655,424B)0x35FEE7F4F1:malloc(malloc.c:2862)
因此,即使内存已经由free()释放,似乎malloc调用了brk / sbrk,也没有将其返回给操作系统。
如何强制free()立即调用sbrk()并将所有内存返回给OS?
我在每个MB都非常重要的低端平台上运行。
提前致谢。
我有一个简短的程序,通过向其添加节点来生成链接列表,然后释放链接列表分配的内存.
Valgrind不报告任何内存泄漏错误,但该过程继续保持分配的内存.
在将sizeof(structure_name)分配的内存更改为固定数512后,我才能修复错误.(请参阅注释代码)
这是一个错误还是正常的操作?这是代码:
#include <execinfo.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct llist_node {
int ibody;
struct llist_node * next;
struct llist_node * previous;
struct llist * list;
}llist_node;
typedef struct llist {
struct llist_node * head;
struct llist_node * tail;
int id;
int count;
}llist;
llist_node * new_lnode (void) {
llist_node * nnode = (llist_node *) malloc ( 512 );
// llist_node * nnode = (llist_node *) malloc ( sizeof(llist_node) );
nnode->next = NULL;
nnode->previous = NULL;
nnode->list = …Run Code Online (Sandbox Code Playgroud)