问题标签 [stack-memory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
17 回答
141566 浏览

assembly - 堆栈在汇编语言中是如何工作的?

我目前正在尝试了解堆栈是如何工作的,所以我决定自学一些汇编语言,我正在使用这本书:

http://savannah.nongnu.org/projects/pgubook/

我正在使用Gas并在Linux Mint上进行开发。

我有点困惑:

据我所知,堆栈只是一种数据结构。所以我假设如果我在汇编中编码,我必须自己实现堆栈。然而,情况似乎并非如此,因为有类似的命令

因此,在为x86架构编写汇编代码并使用 Gas 语法时:堆栈只是已经实现的数据结构吗?或者它实际上是在硬件级别实现的?或者是别的什么?其他芯片组的大多数汇编语言也是否已经实现了堆栈?

我知道这是一个有点愚蠢的问题,但我实际上对此感到很困惑。

0 投票
5 回答
13319 浏览

c++ - 如何使用 glibc 的字符串实现在堆栈上分配 std::string?

我的理解是上面的代码使用了默认的分配器来调用new。因此,即使 std::string foo 是在堆栈上分配的,foo 内部的内部缓冲区也会在堆上分配。

如何创建一个完全在堆栈上分配的字符串?

0 投票
4 回答
12532 浏览

java - 分配的变量引用在哪里,在堆栈中还是在堆中?

我有个问题

例如,当我在方法中声明变量时会发生什么。

myShip 引用在哪里分配,在堆栈中还是在堆中?

我认为在堆栈中,但我很困惑,因为我正在阅读 J2ME 游戏编程书“Java 类被实例化到 Java 堆上”

所有java类?

提前致谢

0 投票
1 回答
9763 浏览

c - 它在堆栈还是堆上?

我有一些令人困惑的 C 代码。出于与此代码有关的原因,我想知道如何判断一个struct对象是在堆上还是在堆栈上?

对象不是malloc或创建的calloc。他们以数组的形式开始他们的生活。出于本文的目的,我将调用 struct Emp。

以各种方式对对象进行排序和操作,在某些时候,对象被复制然后交给数组指针。复制是通过memcpy. 然后将对象放入以下内容中:Emp* emps_a[6].

对象来自副本并分配到上述emps_a。

我不确定这是否与我的问题有关。我从不需要 free() 或清理内存……恐怕我对 C 不太了解。

非常感谢您的帮助。

0 投票
23 回答
13960 浏览

c++ - 为什么不在 C++ 中对所有内容都使用指针?

假设我定义了一些类:

然后使用它编写一些代码。为什么我要执行以下操作?

来自 Java 世界,我总是这样写:

他们基本上做同样的事情,对吧?一个在堆栈上,另一个在堆上,所以我必须稍后将其删除。两者有什么根本区别吗?为什么我应该更喜欢一个而不是另一个?

0 投票
1 回答
335 浏览

java - Java 对象方法栈帧参数

所以在java中,假设你在一个类'Foo'中有一个非静态方法'bar()'。

然后说你这样调用这个方法:

现在调用的堆栈帧包括整数参数,以及用作对象内部引用的“this”参数。

除了“this”和方法参数之外,还有哪些有趣的参数被复制到新的堆栈帧中?

.

0 投票
7 回答
6908 浏览

linux - 如何在 Linux 上为 clone() 系统调用映射堆栈?

Linux 上的 clone() 系统调用采用指向堆栈的参数,以供新创建的线程使用。这样做的明显方法是简单地 malloc 一些空间并传递它,但是您必须确保您已经 malloc 了与该线程将使用的一样多的堆栈空间(难以预测)。

我记得在使用 pthreads 时我不必这样做,所以我很好奇它做了什么。我遇到了这个站点,它解释说:“Linux pthreads 实现使用的最佳解决方案是使用 mmap 分配内存,并使用标志指定在使用时分配的内存区域。这样,内存分配给堆栈,如果系统无法分配额外的内存,则会发生分段冲突。”

我听说过使用 mmap 的唯一上下文是将文件映射到内存中,并且确实读取 mmap 手册页它需要一个文件描述符。这如何用于分配动态长度堆栈以提供给 clone()?那个网站疯了吗?;)

在任何一种情况下,内核是否都不需要知道如何为新堆栈找到一堆空闲的内存,因为这是用户启动新进程时它必须一直做的事情?如果内核已经可以解决这个问题,为什么还需要首先指定堆栈指针?

0 投票
4 回答
316 浏览

heap-memory - 堆和堆栈空间的未初始化值

为什么堆空间总是设置为零?为什么堆栈空间同样不设置为零?

0 投票
8 回答
59112 浏览

c# - 数组、堆和栈以及值类型

在上面的代码中,new int[100] 是在堆上生成数组吗?根据我通过 c# 在 CLR 上阅读的内容,答案是肯定的。但我不明白的是,数组内部的实际 int 会发生什么。由于它们是值类型,我猜它们必须被装箱,例如,我可以将 myIntegers 传递给程序的其他部分,如果它们一直留在堆栈上,它会弄乱堆栈. 还是我错了?我猜他们只是被装箱了,只要数组存在,它们就会一直存在于堆上。

0 投票
6 回答
11183 浏览

java - 方法在哪里?堆栈还是堆中?

我知道方法的局部变量和参数存在于堆栈中,但我无法弄清楚在 Java 的情况下方法实际存在于哪里?

如果我声明任何 Thread 对象,例如:

所以这意味着我已经创建了一个单独的方法调用,除了 main 方法。这是什么意思?这是否意味着在堆栈内存上调用单独的方法序列?我对吗?