标签: heap

如何删除最大堆中的最小密钥?

我需要实现一个函数HEAP-DELETE-MIN(Array)来删除最大堆中的最小整数.我不是要求功能本身,但有人可以为我提供一些 伪代码来帮助我开始吗?这将是一个很大的帮助.该数组应该在函数末尾保持最大堆.

heap max-heap

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

PipedInputStream/PipedOutputStream紧密"循环"::为什么"java.lang.OutOfMemoryError:Java堆空间"?

我正在尝试PipedInputStream并且PipedOutputStream无法理解为什么以下代码会导致Java堆耗尽问题.String创建的所有临时对象都应该是gc -ed.为什么我会得到一个OutOfMemoryError

我试图写String每1000 万个字符长的1000个对象.即使在调用时,下面的代码也会失败一半-Xmx2g.更多的痕迹:

written string #453
read string #453
written string #454
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)

......揭示了PipedInputStream只有一个String对象"落后"了PipedOutputStream.我不明白为什么垃圾收集无法回收所有必要的堆内存.

import java.io.*;
import java.util.*;


class Worker implements Runnable {

    private ObjectOutputStream oos;
    private PipedInputStream   pis;

    public Worker() throws IOException {
        this.pis = new PipedInputStream();
        this.oos = new ObjectOutputStream(new PipedOutputStream( pis ));
    }

    @Override
    public void run() {
        try { …
Run Code Online (Sandbox Code Playgroud)

java heap garbage-collection

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

为什么使用堆栈而不是堆?

我只看到了这个缺点:你可以得到StackOverflow :)为什么不只使用堆?

在Java,C,C++中,函数的参数在堆栈上传递.函数体内的普通变量是在堆栈中创建的.

据我所知,每个线程的堆栈是有限的,有一些默认值,但相对较低:1-8 Mb.为什么不使用堆而不是堆栈.两者都在内存中,只是操作系统从地址A到B分离是堆,而从C到D是堆栈.

有可变的参数.它说有10个变量,每个变量4个字节.如果您阅读11而不是您可能会读取一些数据"内存"垃圾,也许正是您想要的黑客攻击或者您可能会遇到分段错误...如果操作系统检测到您是坏孩子.:) - 所以安全性不能成为使用Stack的理由.

c++ java memory heap stack

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

对象的大小取决于它读取的内容

如果我有2个inputStream对象分别读取/保存4gb和4mb的文件.物体的大小是多少?对象的大小取决于内容吗?

处理大量的Excel文件时,我面临每个宝石错误.

java heap

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

数据结构,实现快速高效的搜索

我必须将排序后的数据存储在数据结构中.我想要使​​用的数据结构是堆或二进制搜索树.但我很困惑哪一个更能满足要求即快速有效的搜索.

- - 更多细节 - -

我正在设计一个从源(比如数据网格)接收数据然后将其存储到数据结构中的应用程序.来自数据GRID站的数据采用排序数字的形式.排序数据可以按升序或降序排列.

现在我必须搜索数据.这个过程应该高效快捷.

heap binary-search-tree data-structures

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

这是内存泄漏,因为内存是在堆栈上分配的吗?

我有一个可以是"路由器"或"交换机"的设备.我使用下面的函数,传递一个枚举,返回我的字符串.我的问题是whoami的内存是在堆栈上分配的.当此函数devicetype_string完成时,堆栈将被销毁.当我使用指向堆栈上分配的内存的指针时,这不会导致问题吗?

当前代码有效.我只是想了解为什么它的工作原理.我认为更清洁和可移植的解决方案是malloc内存来保持whoami(以便它进入堆)并且调用函数应该释放该内存.

这是目前的计划:

char *devicetype_string (FwdrType devicetype)
{
    char *whoami;

    switch (devicetype)
    {
        case FWDR_TYPE__ROUTER:
            whoami = "Router";
            break;

        case FWDR_TYPE__SWITCH:
            whoami = "Switch";
            break;

        default:
            whoami = "Fwder Type UNKNOWN";
    }

    return whoami;
}

foo()
{
    . . .
    FwderType abc = FWDR_TYPE__ROUTER;

    printf ("%s", devicetype_string(abc));
}
Run Code Online (Sandbox Code Playgroud)

c memory heap stack memory-management

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

没有关键字“ new”的数组初始化

在C#中,可以像下面的示例一样在不使用关键字“ new”的情况下初始化数组:

int[] x = { 10, 20, 30 };
Run Code Online (Sandbox Code Playgroud)

这是否意味着数组将在堆栈上初始化,因为关键字“ new”对于在堆上进行初始化是必需的?

c# arrays heap stack

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

是否有可能在Java中有多个堆?

是否有可能在Java中有多个堆?如果有可能那么它会在哪些情况下发生?

java memory heap garbage-collection memory-management

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

变量如何存储在堆栈中?

我已经读过有两个内存区域,一个堆栈和另一个堆栈.基本数据类型(如int,double,float等)存储在堆栈中,而引用类型存储在堆上.正如我们所知,堆栈是LIFO指首先删除最后推送的元素.现在假设下面的代码

int first = 10;
double second = 20.0;
float third = 3.0F;
Run Code Online (Sandbox Code Playgroud)

因此,first将首先推,然后secondthird.所以thirdfloat类型的变量将位于堆栈顶部,但如果我使用以下代码(假设在C#中)

Console.WriteLine(second);
Run Code Online (Sandbox Code Playgroud)

second当变量third位于堆栈顶部时,如何访问变量的值?

c# heap stack

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

C++堆/堆栈澄清

我需要对C++内存分配做一些澄清,我只是举个例子

假设我已经创建了一个类A,它包含两个容器:一个hash_map和一个std :: vector,如下所示:

class Example{

// methods to add stuff to containers
//...

std::hash_map<std::string,int> map;
std::vector<std::string> vec;
}
Run Code Online (Sandbox Code Playgroud)

如果我然后使用new运算符在堆上创建示例对象:

Example* ex = new Example();
Run Code Online (Sandbox Code Playgroud)

并为每个容器添加一千个条目,我添加的条目也将位于堆上吗?如果是,那么如果我这样做会有什么不同:

 class Example{

    // methods to add stuff to containers
    //...

    std::hash_map<std::string,int>* map;
    std::vector<std::string>* vec;
    }
Run Code Online (Sandbox Code Playgroud)

然后 Example* ex = new Example();

c++ heap stack initialization

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