相关疑难解决方法(0)

什么是 Rust 策略来取消提交并将内存返回给操作系统?

在堆上分配内存是一项昂贵的操作,因此一些编程语言避免将其返还给操作系统,即使已分配的内存不再使用。

但是对于很多场景,比如在云上运行的微服务,你会希望内存使用率低,否则费用会很高。因此,在这些情况下,在不使用内存后释放内存非常重要。

什么是 Rust 取消提交并将内存返回给操作系统的默认策略?
这怎么能改变呢?

memory memory-management rust microservices

4
推荐指数
1
解决办法
381
查看次数

调用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
查看次数

我怎样才能保证在释放内存时,操作系统会回收内存以供其使用?

我注意到这个程序:

#include <stdio.h>

int main() {
  const size_t alloc_size = 1*1024*1024;
  for (size_t i = 0; i < 3; i++) {
    printf("1\n");
    usleep(1000*1000);
    void *p[3];
    for (size_t j = 3; j--; )
      memset(p[j] = malloc(alloc_size),0,alloc_size); // memset for de-virtualize the memory
    usleep(1000*1000);
    printf("2\n");
    free(p[i]);
    p[i] = NULL;
    usleep(1000*1000*4);
    printf("3\n");
    for (size_t j = 3; j--; )
      free(p[j]);
  }
}
Run Code Online (Sandbox Code Playgroud)

它分配3个存储器,3次,每次释放不同的存储器,根据存储器释放存储器watch free -m,这意味着free无论存储器在程序地址空间内的位置如何,OS都会为每个存储器回收存储器.我可以以某种方式得到这种效果的保证吗?或者是否已经有类似的东西(比如>64KB分配规则)?

c linux memory memory-management

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

为什么free()函数不会将内存返回给操作系统?

当我在Linux上使用顶级终端程序时,我看不到免费的结果.

我的期望是:

  1. 免费地图和清单.

  2. 我可以在顶部看到的内存使用情况(Linux函数)或者/proc/meminfo 比过去更小.

  3. 睡觉就是开始.

  4. 程序退出.

但是,当程序结束时,内存的使用量会变小.

你会解释自由功能的逻辑吗?

以下是我的代码.

for(mapIter = bufMap->begin(); mapIter != bufMap -> end();mapIter++)
{
    list<buff> *buffList = mapIter->second;
    list<buff>::iterator listIter;
    for(listIter = buffList->begin(); listIter != buffList->end();listIter++)
    {
        free(listIter->argu1);
        free(listIter->argu2);
        free(listIter->argu3);
    }
    delete buffList;
}
delete bufMap;

printf("Free Complete!\n");

sleep(10);
printf("endend\n");
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ linux redhat

0
推荐指数
1
解决办法
336
查看次数

删除或删除[]时计算机会执行什么操作?

那里!我是c ++的新手,遇到了删除指向数组的指针的问题.如果你搜索"如何正确删除指向数组的指针",之前有一个类似的问题.结论是,保持使用new和使用的习惯是一个好习惯delete.如果您使用new <data-type> []分配momery,delete[]应该遵循.

我对这个答案不满意.计算机在执行delete或delete[]执行时会做什么?所以,我试过这个.

#include <iostream>
using namespace std;

int main()
{
    int* pvalue = NULL;
    pvalue = new int[3]; 
    cout << "address of pvalue:" << pvalue << endl;

    for (int i = 0; i < 3; ++i)
    {
        *(pvalue+i) = i+1;
    }
    for (int i = 0; i < 3; ++i)
    {
        cout << "Value of pvalue : " << *(pvalue+i) << endl;
    }

delete pvalue; …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-memory-allocation delete-operator c++11

-1
推荐指数
1
解决办法
114
查看次数

C malloc和免费

我被教导如果你做malloc(),但你没有free(),内存将一直保持到重新启动.好吧,我当然测试了它.一个非常简单的代码:

#include <stdlib.h>

int main(void)
{
    while (1) malloc(1000);
}
Run Code Online (Sandbox Code Playgroud)

我在任务管理器(Windows 8.1)中查看了它.

嗯,该程序真的很快就占用了2037.4 MB而且就这样.我知道它可能是Windows限制程序.

但这是奇怪的部分:当我关闭控制台时,内存使用百分比下降,即使我被教导它不应该!

免费呼叫是多余的,因为操作系统无论如何都要释放它?

(这里的问题是相关的,但不能完全回答我是否应该自由.)

c malloc free memory-management

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