|
1
6
从堆栈中分配内存非常简单。您只需要调整堆栈指针。在X64上,它是一条指令:
堆分配需要一些内存管理机制来查找足以容纳数组的块,选择块,将其标记为已分配到某个位置,并可能要求操作系统通过增加进程的地址空间来分配更多的内存页。它比基于堆栈的分配要复杂得多。 重新“修复”,因为我没有这本书,我不知道它使用的上下文。这可能意味着数组在分配后不会在堆中移动。 |
|
|
2
2
来自Ergosys的答案的术语完全正确。这个问题是我为什么讨厌西贝斯塔的另一个例子。 在许多现代系统中,从堆中分配对象使用与从堆栈中分配完全相同的指令:测试并增加堆指针。(事实上更容易 结合 堆栈分配大于组合堆分配,但也可以大于。)执行这种分配的编译器包括 Glorious Glasgow Haskell Compiler 和 Standard ML of New Jersey . SML/NJ已经在这种情况下部署了20多年,所以您认为Sebesta现在可能已经开始使用它了。 总结: 塞贝斯塔太笼统了 ,像往常一样。也许有理由更喜欢堆栈分配,但是这个故事比Sebesta似乎意识到的要复杂得多,或者比Mehrdad在他的回答中描述的要复杂得多。一个很好的开始理解更深层次的故事的地方是 Andrew Appel's paper about stack allocation . |
|
|
3
1
如果堆可以增长以适应每个新的分配,那么创建一个数组可能很快。如果堆是“固定的”,那么我们需要在堆中找到空间,正如Mehrdad解释的那样,这需要非常重要的工作。 不过,我并不是很认真地分析句子的结尾: 固定堆动态数组的缺点是它们分配数组的时间较长 从堆栈。 当然,您不会“从堆栈”分配堆内存。 |
|
|
4
1
术语来自三个正交概念:
|
|
|
Sudhanva c · 如何提高编码技能?[已关闭] 8 年前 |
|
|
hoffm · 为什么Ruby找不到调用方类中定义的常量? 8 年前 |
|
|
Thamme Gowda · “lambda”关键字的较短替代项? 9 年前 |
|
|
AlphaModder · 有没有带有“不寻常”访问修饰符的编程语言? 11 年前 |
|
|
lucasasecas · 有可能静态地使用动态语言吗? 12 年前 |
|
|
Eugenio Laghi · 仅由括号、加号和感叹号组成的语言 12 年前 |
|
dallin · 数组中的逗号运算符是否有名称? 12 年前 |