Questions tagged «heap»

堆(数据结构)是按深度排序的树。堆也可以引用为动态分配而预留的进程内存。


5
Max-Heapify中最坏的情况-如何获得2n / 3?
在CLRS,第三版,第155页中,假定在MAX-HEAPIFY中, 子树的每个子树的大小最大为2n / 3-最坏的情况是树的底部恰好是一半满了。 我知道为什么当树的底部恰好是一半满时最糟糕。在此问题中还回答了MAX-HEAPIFY中的最坏情况:“最坏情况发生在树的底部恰好是一半满时” 我的问题是如何获得2n / 3? 为什么如果底层为半满,则子树的大小最大为2n / 3? 如何计算? 谢谢

14
Java非常大的堆大小
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 改善这个问题 是否有人在Java中使用12 GB或更高的超大堆有经验? GC是否会使程序无法使用? 您使用什么GC参数? 哪种JVM,Sun或BEA更适合于此? 在这种情况下,哪种平台(Linux或Windows)性能更好? 在Windows的情况下,如此高的内存负载下64位Vista和XP之间会有性能差异吗?


23
为什么不对C ++中的所有内容使用指针?
假设我定义了一些类: class Pixel { public: Pixel(){ x=0; y=0;}; int x; int y; } 然后使用它编写一些代码。为什么要执行以下操作? Pixel p; p.x = 2; p.y = 5; 来自Java世界,我总是写: Pixel* p = new Pixel(); p->x = 2; p->y = 5; 他们基本上做同样的事情,对不对?一个在堆栈上,另一个在堆栈上,因此以后我必须将其删除。两者之间有根本区别吗?为什么我要优先选择另一个?
75 c++  pointers  stack  heap 


8
在C ++中使用std :: allocator而不是new有什么优势?
我刚刚读过有关std::allocator。我认为,使用它而不是使用newand更复杂delete。 随着allocator我们必须明确分配堆内存,构建它,消灭它,然后终于解除分配内存。那么为什么创建它呢? 在什么情况下可以使用它,何时应使用它代替new和delete?
73 c++  heap  alloc 

7
不同手机/设备和操作系统版本上的Android堆大小
有谁知道Android手机上的堆大小是否根据操作系统版本中的设置是恒定值,还是这是电话生产商可以决定的设置? 堆大小与手机上的RAM量成正比吗? 我只发现有人说应用程序的堆大小为16M的文章。但是,这些文章有些陈旧。以我为例,在一个特定模型上,堆大小从20M到24M不等。这款手机具有768M的RAM。
72 android  heap 

8
Android:BitmapFactory.decodeStream()内存不足,带有400KB文件和2MB可用堆
我的应用在源代码的以下行中遇到OOM错误: image = BitmapFactory.decodeStream(assetManager.open(imgFilename)); 在导致应用因OOM错误而被终止的分配之前: (...) 08-05 21:22:12.443: I/dalvikvm-heap(2319): Clamp target GC heap from 25.056MB to 24.000MB 08-05 21:22:12.443: D/dalvikvm(2319): GC_FOR_MALLOC freed <1K, 50% free 2709K/5379K, external 18296K/19336K, paused 58ms 08-05 21:22:14.513: D/dalvikvm(2319): GC_EXTERNAL_ALLOC freed <1K, 50% free 2709K/5379K, external 18296K/19336K, paused 101ms 08-05 21:22:14.903: I/dalvikvm-heap(2319): Clamp target GC heap …
67 android  heap 

7
指针比较在C中如何工作?比较不指向同一数组的指针是否可以?
在K&R(C编程语言第二版)第5章中,我阅读了以下内容: 首先,可以在某些情况下比较指针。如果p和q指向同一个数组的成员,则关系一样==,!=,<,>=,等正常工作。 这似乎暗示着只能比较指向同一数组的指针。 但是当我尝试这段代码时 char t = 't'; char *pt = &t; char x = 'x'; char *px = &x; printf("%d\n", pt > px); 1 被打印到屏幕上。 首先,我以为我会得到未定义或某种类型或错误的信息,因为pt和px没有指向同一数组(至少在我看来)。 同样是pt > px因为两个指针都指向存储在堆栈中的变量,并且堆栈变小,所以的内存地址t大于x?的内存地址。这是为什么pt > px呢? 引入malloc时,我会更加困惑。同样,在K&R的8.7章中,内容如下: 但是,仍然有一个假设,即sbrk可以有意义地比较指向返回的不同块的指针。该标准不能保证这一点,该标准仅允许在数组内进行指针比较。因此,此版本malloc仅可在通用指针比较有意义的机器之间移植。 将指向堆上分配的空间的指针与指向堆栈变量的指针进行比较,我没有任何问题。 例如,以下代码可以很好地工作并1可以打印: char t = 't'; char *pt = &t; char *px = malloc(10); strcpy(px, pt); …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.