相关疑难解决方法(0)

哪个更快:堆栈分配或堆分配

这个问题可能听起来相当简单,但这是我与另一位与我合作的开发人员的辩论.

我正在小心处理堆栈分配的东西,而不是堆分配它们.他正在跟我说话,看着我的肩膀并评论说这没有必要,因为他们的表现是明智的.

我一直认为堆栈的增长是恒定的时间,并且堆分配的性能取决于堆的当前复杂性(用于找到合适大小的孔)和解除分配(折叠孔以减少碎片,如如果我没有弄错的话,许多标准库实现在删除期间需要时间来完成此操作.

这让我觉得可能非常依赖于编译器.特别是对于这个项目,我使用Metrowerks编译器来实现PPC架构.对这种组合的洞察力将是最有帮助的,但总的来说,对于GCC和MSVC++,情况如何?堆分配不如堆栈分配高吗?没有区别吗?或者差异是如此微小,它变得毫无意义的微优化.

c++ memory heap performance stack

489
推荐指数
13
解决办法
12万
查看次数

"a"堆和"堆"之间的关系是什么?

堆是树数据结构,其中树的较高级别总是包含比较低级别更大(或更小,如果它设置的那样)值."堆"是一堆程序可用于动态分配的空闲RAM.它们都被称为"堆",但是那个与另一个有什么关系呢?

memory heap definition

31
推荐指数
3
解决办法
4283
查看次数

免费商店"堆"一词的起源是什么?

我试图找到免费商店通常被称为堆的官方(或足够好)的原因.

除了它从数据段的末尾增长之外,我无法想到一个很好的理由,特别是因为它与堆数据结构几乎没有关系.

注意:很多人都提到它只是一大堆没有组织的东西.但对我来说,术语堆物理意味着一堆物理依赖于彼此的东西.你从下面拉出一个,其他一切都在它上面坍塌,等等.换句话说,对我来说,堆松的声音组织起来很糟糕(例如,最新的东西在上面).这并不是一个堆在大多数计算机上实际工作的方式,但如果你把东西放在堆的开头然后增长它我想它可以工作.

heap terminology

22
推荐指数
3
解决办法
3789
查看次数

堆实际上是堆吗?

可能重复:
为什么两个不同的概念都称为"堆"?
"a"堆和"堆"之间的关系是什么?

在.NET(和我所知的Java)中,动态分配对象的区域称为托管堆.但是,大多数描述托管堆如何工作的文档将其描述为线性数据结构,例如链表或堆栈.

那么,托管堆实际上是,还是用其他一些数据结构实现?如果它实际上没有使用堆数据结构,那么术语的重大失败似乎会使这个词的含义过载.

如果它实际上是一个堆数据结构,那么满足堆属性的值是什么:分配的内存区域的大小是多少?

.net java memory-management

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

堆栈与堆栈和堆与堆

我正在为我的数据组织决赛学习,我正在研究堆栈和堆,因为我知道它们将进入决赛,我将需要了解差异。我知道堆栈是什么,堆是什么。

但是我对堆栈是什么和堆是什么感到困惑。

堆栈是 RAM 中存储内存的地方,如果空间不足,就会发生堆栈溢出。对象默认存储在这里,当对象超出范围时它会重新分配内存,并且速度更快。

堆是 RAM 中存储内存的地方,如果空间不足,操作系统会分配更多空间。对于要存储在堆上的对象,需要使用 new 运算符来告知它,并且只有在告知后才会被释放。可能会出现碎片问题,它比堆栈慢,并且可以更好地处理大量内存。

但是什么是栈,什么是堆?它是存储内存的方式吗?例如静态数组或静态向量是堆栈类型和动态数组,链表是堆类型?

谢谢你们!

c++ heap stack heap-memory stack-memory

9
推荐指数
3
解决办法
5468
查看次数

为什么malloc()的池称为"堆"?

任何人都可以解释为什么由malloc()/ 管理的内存池free()被称为堆?

基于[1]:http://www.google.com/url? q = http://gee.cs.oswego.edu/dl/html/malloc.html&sa=D&sntz=1&usg=AFQjCNHaQLotbBKKwYqxiiYWN1146BWzFw"Doug Lea的解释他的malloc()如何工作",我们称之为"堆"的数据结构根本不被使用.

我们称之为"堆",因为malloc()实现使用最适合的内存块选择来返回,这在历史上是使用最小块的块来实现的,按块大小排序?

c heap malloc

7
推荐指数
0
解决办法
464
查看次数

对象如何存储在堆中?

对象如何存储在堆中.例如,自行车类可以这样定义:

public class Bicycle {

   public int gear;
   public int speed;

   public Bicycle(int startSpeed, int startGear) {
       gear = startGear;
       speed = startSpeed;
   }

   public void setGear(int newValue) {
       gear = newValue;
   } 

   public void applyBrake(int decrement) {
       speed -= decrement;
   }

   public void speedUp(int increment) {
      speed += increment;
   }   
}
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个自行车对象:

Bicycle bicycle = new Bicycle(20,10)
Run Code Online (Sandbox Code Playgroud)

然后这个自行车对象应该存储在堆中.但我不明白堆如何准确存储这些实例变量和方法,如速度和齿轮.我知道堆应该实现为树.那么对象如何存储在树中?当你bicycle.speed用来找到速度的价值时,时间复杂度会是多少?

java heap memory-management object

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

为什么在创建具有关联指针的对象时使用'new'?

我正在通过阅读教科书来学习C++."对象和指针"部分说,声明指向对象的指针,如下所示:

SomeClass *ptrMyClass;
Run Code Online (Sandbox Code Playgroud)

什么都不做.只有在定义了Class的实例之后才有意义,如下所示:

SomeClass *ptrMyClass;
ptrMyClass = new SomeClass;
Run Code Online (Sandbox Code Playgroud)

或者将这些组合在一起:

SomeClass *ptrMyClass = new SomeClass;
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么我们必须使用'new'在堆上创建SomeClass的实例?到目前为止,在本书中,指针始终指向"正常"变量(如int,float ...),这些变量不是通过使用"new"创建的.谢谢.

c++ heap pointers object

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

动态内存分配中使用的堆与数据结构之间的连接是什么?

可能重复:
为什么两个不同的概念都称为"堆"?

我用Google搜索过,但找不到这个问题的答案; 动态内存分配中使用的堆与数据结构之间的连接是什么?内存是否以与堆数据结构类似的方式组织在堆上?如果是这样,这看起来很奇怪,因为获取内存应该是随机访问AFAIK(即O(1)),但是从堆中查找项目不会在恒定时间内完成.

那么,这只是堆的重载意义,可以这么说,还是有某种连接?

c++ heap heap-memory data-structures

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

什么是动态记忆?

可能重复:
动态内存和"普通"内存之间的差异

我正在阅读C++教程,我不明白为什么我需要声明动态内存,这就是教程所说的:

到目前为止,在我们所有的程序中,我们只有我们为变量声明的可用内存,在程序执行之前,所有变量的大小都要在源代码中确定.

然后它说我们必须使用new和delete运算符来使用动态内存.但是,我似乎在声明一个指针时使用动态内存,例如char*p,我没有指定字符数组的长度.事实上,我认为当你使用指针时,你总是使用动态内存.不是吗?我只是没有看到使用new运算符声明变量之间的区别.我真的不明白动态内存是什么.谁能解释一下这个?

c++

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