问题标签 [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.
c - 堆栈大小在运行时会增长吗?
我想知道堆栈大小是否会像堆一样在运行时增长?
c# - 从属性返回值类型
关于类中的值类型属性,我对堆栈和堆上发生的事情感到困惑。
到目前为止我的理解:
当您创建具有如下结构(值类型)的类时:
如果你像这样创建一个类实例:
堆栈和堆将如下所示:
...其中 Bar 结构嵌入在堆中的 Foo 类中。这对我来说很有意义,但是当我们考虑在 Foo 对象中修改 BarStruct 类中的 Number 整数时,我开始失去它。例如:
据我了解,这应该是返回 BarStruct 的副本以存在于堆栈中,这意味着 BarStruct 成员的任何更改都不会传递到对象,这就是上面最后一行给出错误的原因。
到目前为止这是正确的吗?
如果是这样,我的问题是,怎么会有这样的任务:
...有效并更改堆值?当然这只是改变堆栈上的值?此外,(渐渐地)我发现它非常令人困惑,以至于您可以在值类型上使用 new 。对我来说,new 用于在堆上分配(根据 C++),并且感觉不自然地为堆栈上的项目执行此操作。
因此,只是为了重申这个问题,我是否正确假设调用包含结构的属性时会发生什么,为什么可以将新结构分配给副本,但它仍然会更改堆上的引用?
真的希望这一切都有意义。
如果您需要澄清,请大喊大叫!
塔,
安迪。
c# - c#结构/类堆栈/堆控制?
所以在 c++ 中这很容易。您希望在堆上分配任何类/结构,请使用 new。如果你想要它在堆栈上,不要使用新的。
在 C# 中,我们总是使用 new 关键字,根据它是结构还是类,它被分配在堆栈或堆上(结构进入堆栈,类进入堆) - 在某些应用程序中可能有改变设计时巨大的性能差异使得只有那些对象进入真正属于那里的堆。
我想知道的是 - 有没有一种直接的方法来控制一个对象的分配位置,而不管它是声明为结构还是类?我知道可以将值类型(结构)装箱以进入堆(但装箱/拆箱是以性能为代价的)。有没有办法在堆栈上分配类?
此外,是否有任何机制来分配原始内存并使用 C++ 中的新位置之类的东西?我知道这与被管理的想法不同——但如果您可以使用自定义内存管理,它会产生很大的性能差异。
我喜欢 C# 的便利,因为它是垃圾收集器和其他东西 - 但有时,在处理应用程序的瓶颈时,可能希望对实际发生的事情有更多的控制。
欢迎任何提示/提示:)
编辑:性能示例:
这在我的机器上执行需要 1.8 秒(请注意,实际上只有分配正在进行 - 没有参数传递)
如果将 Foo1 从 struct 更改为 class,则执行需要 8.9 秒!慢了五倍
c++ - C++ 类可以确定它是在堆栈上还是在堆上?
我有
有没有办法让 Foo 能够分离出来:
和
我希望 Foo 能够根据它是在堆栈上还是在堆上分配来做不同的事情。
编辑:
很多人问我“为什么要这样做?”
答案:
我现在正在使用引用计数的 GC。但是,我也希望有能力进行标记和扫描。为此,我需要标记一组“根”指针——这些是堆栈上的指针。因此,对于每个类,我想知道它们是在堆栈中还是在堆中。
kernel - 程序栈和堆,它们是如何工作的?
我知道每个正在运行的进程在虚拟内存中都有与之关联的页面,并且很少有页面会根据需要加载到主内存中。我也知道该程序将有一个堆栈和一个堆来分配动态内存。这是我的问题。
- 堆栈也是主内存中某些页面的一部分吗?
- 当程序进入等待状态时会发生什么?堆栈指针、程序计数器和其他信息存储在哪里?
- 为什么栈会变小,而堆会变大?
- L1、L2 缓存可以只包含一块连续的内存,还是可以包含堆栈和堆的一部分?
你能推荐一本涵盖这些内容的好书吗?
java - Java 基元数组是存储在堆栈还是堆中?
我有一个这样的数组声明:
这a
是一个原始int
类型的数组。这个数组存储在哪里?它是存储在堆上还是栈上?这是一个原始类型int
,所有原始类型都不存储在堆上。
c++ - 当对象在函数内部静态构造时,它是在堆上分配还是在堆栈上分配?
如果我有以下代码:
对于 (...) { A a; }
a 会分配在堆上还是堆栈上?
windows - Windows 程序集堆和堆栈?
操作系统:Windows 7 32 位
所以像 c++ 一样,有一个堆和一个堆栈。但是我最近开始学习一些汇编,并没有看到任何类似的东西,只有一个堆栈,但它看起来就像纯内存。那么堆和堆栈实现是否特定于 c++ 和其他语言?或者你仍然在汇编中分配了一个堆和堆栈?启动可执行文件时,Windows 在为进程分配内存方面做了什么?进程如何知道堆栈大小需要多大?
怎么回事
编辑:也许有人可以提供有关 CPU/OS 如何为进程处理堆和堆栈内存的链接
java - 基本 Java 多线程问题
在Java中实例化一个对象时,它是否绑定到实例化的线程?因为当我在一个线程中匿名实现一个接口,并将其传递给另一个线程运行时,它的所有方法都在原来的线程中运行。如果它们被绑定到它们的创建线程,那么无论如何创建一个将在任何线程调用它的线程中运行的对象?
.net - 线程堆和栈
在产生新线程的情况下如何分配内存,即内存堆、内存堆栈和线程是如何相关的?我知道这是基本的(.net 框架概念),但不知何故我不太了解这个概念。