问题标签 [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.
assembly - 堆栈在汇编语言中是如何工作的?
我目前正在尝试了解堆栈是如何工作的,所以我决定自学一些汇编语言,我正在使用这本书:
http://savannah.nongnu.org/projects/pgubook/
我正在使用Gas并在Linux Mint上进行开发。
我有点困惑:
据我所知,堆栈只是一种数据结构。所以我假设如果我在汇编中编码,我必须自己实现堆栈。然而,情况似乎并非如此,因为有类似的命令
因此,在为x86架构编写汇编代码并使用 Gas 语法时:堆栈只是已经实现的数据结构吗?或者它实际上是在硬件级别实现的?或者是别的什么?其他芯片组的大多数汇编语言也是否已经实现了堆栈?
我知道这是一个有点愚蠢的问题,但我实际上对此感到很困惑。
c++ - 如何使用 glibc 的字符串实现在堆栈上分配 std::string?
我的理解是上面的代码使用了默认的分配器来调用new。因此,即使 std::string foo 是在堆栈上分配的,foo 内部的内部缓冲区也会在堆上分配。
如何创建一个完全在堆栈上分配的字符串?
java - 分配的变量引用在哪里,在堆栈中还是在堆中?
我有个问题
例如,当我在方法中声明变量时会发生什么。
myShip 引用在哪里分配,在堆栈中还是在堆中?
我认为在堆栈中,但我很困惑,因为我正在阅读 J2ME 游戏编程书“Java 类被实例化到 Java 堆上”
所有java类?
提前致谢
c - 它在堆栈还是堆上?
我有一些令人困惑的 C 代码。出于与此代码有关的原因,我想知道如何判断一个struct
对象是在堆上还是在堆栈上?
对象不是用malloc
或创建的calloc
。他们以数组的形式开始他们的生活。出于本文的目的,我将调用 struct Emp。
以各种方式对对象进行排序和操作,在某些时候,对象被复制然后交给数组指针。复制是通过memcpy
. 然后将对象放入以下内容中:Emp* emps_a[6]
.
对象来自副本并分配到上述emps_a。
我不确定这是否与我的问题有关。我从不需要 free() 或清理内存……恐怕我对 C 不太了解。
非常感谢您的帮助。
c++ - 为什么不在 C++ 中对所有内容都使用指针?
假设我定义了一些类:
然后使用它编写一些代码。为什么我要执行以下操作?
来自 Java 世界,我总是这样写:
他们基本上做同样的事情,对吧?一个在堆栈上,另一个在堆上,所以我必须稍后将其删除。两者有什么根本区别吗?为什么我应该更喜欢一个而不是另一个?
java - Java 对象方法栈帧参数
所以在java中,假设你在一个类'Foo'中有一个非静态方法'bar()'。
然后说你这样调用这个方法:
现在调用的堆栈帧包括整数参数,以及用作对象内部引用的“this”参数。
除了“this”和方法参数之外,还有哪些有趣的参数被复制到新的堆栈帧中?
.
linux - 如何在 Linux 上为 clone() 系统调用映射堆栈?
Linux 上的 clone() 系统调用采用指向堆栈的参数,以供新创建的线程使用。这样做的明显方法是简单地 malloc 一些空间并传递它,但是您必须确保您已经 malloc 了与该线程将使用的一样多的堆栈空间(难以预测)。
我记得在使用 pthreads 时我不必这样做,所以我很好奇它做了什么。我遇到了这个站点,它解释说:“Linux pthreads 实现使用的最佳解决方案是使用 mmap 分配内存,并使用标志指定在使用时分配的内存区域。这样,内存分配给堆栈,如果系统无法分配额外的内存,则会发生分段冲突。”
我听说过使用 mmap 的唯一上下文是将文件映射到内存中,并且确实读取 mmap 手册页它需要一个文件描述符。这如何用于分配动态长度堆栈以提供给 clone()?那个网站疯了吗?;)
在任何一种情况下,内核是否都不需要知道如何为新堆栈找到一堆空闲的内存,因为这是用户启动新进程时它必须一直做的事情?如果内核已经可以解决这个问题,为什么还需要首先指定堆栈指针?
heap-memory - 堆和堆栈空间的未初始化值
为什么堆空间总是设置为零?为什么堆栈空间同样不设置为零?
c# - 数组、堆和栈以及值类型
在上面的代码中,new int[100] 是在堆上生成数组吗?根据我通过 c# 在 CLR 上阅读的内容,答案是肯定的。但我不明白的是,数组内部的实际 int 会发生什么。由于它们是值类型,我猜它们必须被装箱,例如,我可以将 myIntegers 传递给程序的其他部分,如果它们一直留在堆栈上,它会弄乱堆栈. 还是我错了?我猜他们只是被装箱了,只要数组存在,它们就会一直存在于堆上。
java - 方法在哪里?堆栈还是堆中?
我知道方法的局部变量和参数存在于堆栈中,但我无法弄清楚在 Java 的情况下方法实际存在于哪里?
如果我声明任何 Thread 对象,例如:
所以这意味着我已经创建了一个单独的方法调用,除了 main 方法。这是什么意思?这是否意味着在堆栈内存上调用单独的方法序列?我对吗?