相关疑难解决方法(0)

强制free()将malloc内存返回给OS

似乎即使我释放了由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都非常重要的低端平台上运行。

提前致谢。

c linux memory memory-management glibc

5
推荐指数
2
解决办法
2576
查看次数

调用free()后内存未释放

我有一个简短的程序,通过向其添加节点来生成链接列表,然后释放链接列表分配的内存.

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)

memory malloc free memory-leaks

2
推荐指数
1
解决办法
3435
查看次数

标签 统计

memory ×2

c ×1

free ×1

glibc ×1

linux ×1

malloc ×1

memory-leaks ×1

memory-management ×1