标签: heap

如何防止在堆上创建对象?

有没有人知道我怎么能在平台无关的C++代码中阻止在堆上创建对象?也就是说,对于"Foo"类,我想阻止用户这样做:

Foo *ptr = new Foo;
Run Code Online (Sandbox Code Playgroud)

并且只允许他们这样做:

Foo myfooObject;
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?

干杯,

c++ heap stack

26
推荐指数
3
解决办法
8478
查看次数

Haskell编译器如何决定是在堆还是堆栈上进行分配?

Haskell没有显式内存管理功能,所有对象都是按值传递的,所以也没有明显的引用计数或垃圾回收.Haskell编译器通常如何决定是否生成在堆栈上分配的代码与在堆上为给定变量分配的代码?是否一致堆或堆栈为同一个函数在不同的调用站点分配相同的变量?当它分配时,它如何决定何时释放内存?堆栈分配和解除分配是否仍在与C中相同的功能入口/出口模式中执行?

compiler-construction heap stack haskell memory-management

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

类成员和显式堆栈/堆分配

假设我们有4个课程如下:

class A
{
    public:           
        A(void) : m_B()
        {
        }
    private:
        B m_B;
}

class B
{
    public:            
        B(void)
        {
           m_i = 1;
        }
    private:
        int m_i;
}

class C
{
    public:           
        C(void) 
        {
            m_D = new D();
        }
        ~C(void) 
        {
            delete m_D;
        }
    private:
        D *m_D;
}

class D
{
    public:           
        D(void)
        {
           m_i = 1;
        }
    private:
        int m_i;
}
Run Code Online (Sandbox Code Playgroud)

可以说有4种情况:

情况1:在堆栈上外部分配,B在堆栈内部分配

A myA1;
Run Code Online (Sandbox Code Playgroud)

情况2:在堆上外部分配,B内部分配在堆栈上

A *myA2 = new A();
Run Code Online (Sandbox Code Playgroud)

情况3:C在堆栈外部分配,D在堆内部分配

C myC1;
Run Code Online (Sandbox Code Playgroud)

情况4:C在堆上外部分配,D在堆内部分配

C *myC2 = new …
Run Code Online (Sandbox Code Playgroud)

c++ memory heap stack memory-management

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

Java集合比c ++容器更快?

我正在阅读关于这个答案的评论,我看到了这个引用.

对象实例化和面向对象的特性使用起来非常快(在许多情况下比C++更快)因为它们从一开始就被设计出来.和收藏很快.标准Java在该领域击败标准C/C++,即使对于大多数优化的C代码也是如此.

一个用户(我可能会添加很高的代表)大胆地为这个说法辩护,说明这一点

  1. java中的堆分配比C++好

  2. 并添加此语句来保护java中的集合

    由于内存子系统不同,Java集合与C++集合相比也很快.

所以我的问题是,任何这些都是真的,如果是这样,为什么java的堆分配要快得多.

c++ java heap collections performance

26
推荐指数
4
解决办法
3895
查看次数

优先级队列和堆之间的区别

似乎优先级队列只是具有正常队列操作的堆,如insert,delete,top等.这是解释优先级队列的正确方法吗?我知道您可以以不同的方式构建优先级队列但是如果我要从堆构建优先级队列,则需要创建优先级队列类并提供构建堆和队列操作的说明,或者是否真的不需要构建班级?

我的意思是如果我有一个函数来构建一个堆和函数来执行像insert,delete这样的操作,我是否需要将所有这些函数放在一个类中,或者我可以通过调用它们来使用它们main.

我想我的问题是,拥有一组函数是否等同于将它们存储在某个类中并通过类或仅使用函数本身来使用它们.

我下面是优先级队列实现的所有方法.这足以称之为实现,还是需要将其置于指定的优先级队列类中?

#ifndef MAX_PRIORITYQ_H
#define MAX_PRIORITYQ_H
#include <iostream>
#include <deque>
#include "print.h"
#include "random.h"

int parent(int i)
{
    return (i - 1) / 2;
}

int left(int i)
{
    if(i == 0)
        return 1;
    else
        return 2*i;
}

int right(int i)
{
    if(i == 0)
        return 2;
    else
        return 2*i + 1;
}

void max_heapify(std::deque<int> &A, int i, int heapsize)
{
    int largest;
    int l = left(i);
    int r = right(i);
    if(l <= heapsize && A[l] …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm heap priority-queue

26
推荐指数
3
解决办法
2万
查看次数

将大型hprof加载到jhat中

我有一个6.5GB的Hprof文件,使用该-XX:-HeapDumpOnOutOfMemoryError选项由64位JVM转储.我把它放在一台16GB的64位机器上,并且我试图将它放入jhat,但它一直在耗尽内存.我试过传递jvm args以获得最小设置,但它拒绝任何最小值,并且在达到最大值之前似乎耗尽了内存.

jvm耗尽内存会使堆积如此之大以至于无法将其加载到具有两倍ram的盒子上,这似乎有点愚蠢.有没有办法让这个运行,或可能摊销分析?

java heap jvm memory-leaks jhat

25
推荐指数
3
解决办法
2万
查看次数

将值从本地堆栈移动到堆?(C++)

如何从方法调用中获取对象值作为结果并将其放在堆上?

例如:

Qt QImage::scaledToWidth方法返回QImage对象的副本.

现在我正在做:

QImage *new_img_on_heap = new QImage(old_imgage_on_heap->scaledToWidth(2000));
Run Code Online (Sandbox Code Playgroud)

这是唯一的方法吗?看起来它已经经历了制作第三个全新物体的麻烦,当我已经在堆栈上有一个完美的好物品时.

我想把它放在堆上的原因是因为真实QImage的很大,我希望它比当前方法的生命周期更长.我打算在我班上的一个字段中填充指针.

我知道QImage有一些隐含的数据共享,但我并不清楚它是如何工作的.另外,我想知道一个通​​用的解决方案,如果我需要使用不像Qt那样精心设计的对象.

c++ heap stack

25
推荐指数
2
解决办法
9747
查看次数

使用什么数据结构来实现动态内存分配堆?

我总是假设堆(数据结构)用于实现堆(动态内存分配),但我被告知我错了.

通常情况下,如何实现堆(例如,通过典型malloc例程或Windows 实现的堆HeapCreate)?他们使用什么数据结构?

不是要问:

在线搜索时,我已经看到了大量关于如何实施严格限制的堆的描述.
仅举几例,我已经看到了很多关于如何实现的描述:

  • 永远不会将内存释放回操作系统的堆(!)
  • 堆只能在小型,类似大小的块上提供合理的性能
  • 堆只能为大型连续块提供合理的性能
  • 等等

而这很有趣,他们都避开更难的问题:
如何是"正常"的,通用的堆(如一个在后面malloc,HeapCreate)来实现?

他们使用什么数据结构(可能还有算法)?

heap memory-management data-structures

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

合并两个最大堆的算法?

是否有一种有效的算法来合并存储为数组的2个最大堆?

algorithm heap merge data-structures

24
推荐指数
2
解决办法
3万
查看次数

如何选择jvm堆大小?

我通常对jvm堆大小做的是将max值设置得非常高,以避免臭名昭着的OutOfMemoryException.

然而,这种策略(或缺乏策略)似乎并不是很聪明.:-).

我的问题是如何选择最小值和最大值,以及两者之间的差异(最大值应该是小还是大?).例如,从这里:

如果初始堆太小,Java应用程序启动变慢,因为JVM被迫频繁执行垃圾收集,直到堆增长到更合理的大小.为获得最佳启动性能,应将初始堆大小设置为与最大堆大小相同.

谢谢.

java heap jvm

24
推荐指数
2
解决办法
3万
查看次数