草庐IT

堆或堆栈上的 Javascript 闭包?

JavaScript(根据标准)在哪里存储闭包:堆还是栈?是否有第三个明确的闭包位置? 最佳答案 说到底就是runtime的一个实现细节。SeePhoenixlink关于实现,为了在上下文被销毁后存储局部变量,基于堆栈的实现不再适合(因为它与基于堆栈的结构的定义相矛盾)。因此,在这种情况下,父上下文的关闭数据保存在动态内存分配中(在“堆”中,即基于堆的实现),使用垃圾收集器(GC)和引用计数。这样的系统在速度上不如基于堆栈的系统有效。然而,实现可能总是优化它:在解析阶段找出函数中是否使用了自由变量,并根据此决定将数据放在堆栈或“堆”

c++ - 从地址查找堆或堆 block 或段

我一直在调试软件中的堆损坏。我可以将数据写入堆并控制一些指针。我可以在不知道这一点的情况下实现执行代码的目标,但这让我有点困惑。问题是我找不到正在写入的block在哪个堆中,也找不到堆段。我在Windbg下使用了:!heap-x[address]和!heap-x-v[address]但他们没有给我任何结果。我知道当第一个堆中没有可用的未提交空间时,某些堆可能会保留另一个堆段。但是,我已经转储了所有堆段,但找不到基地址与我要查找的段相似的段。对我来说似乎有点奇怪,没有进程或应用程序特定的堆有这些block!! 最佳答案 如果堆已损坏,

c++ - 模糊指向堆或堆栈对象的智能指针

我的一个应用程序将从std::unique_ptr的变体中受益匪浅可以将其配置为不总是承担所指向对象的所有权。考虑以下类层次结构:classAbstractFoo{...};templateFoo:publicAbstractFoo{Foo(constAbstractFoo&absFoo){...}...};和一个API,它标准化了每个接受AbstractFoo的例程并转换为Foo的特定实例有必要的。在引用AbstractFoo的情况下实际上已经是正确派生类型的一个实例,只是一个dynamic_cast是必需的,不需要复制数据。但是,当抽象引用的类型不正确时,需要执行重要的工作来创建请

C++堆或堆栈分配?

这是栈上的分配:charinStack[10];//andMyStructcl;这应该在堆中分配:char*inHeap=newchar[10];//andMyClasscl=newMyClass();如果MyClass包含一个chartest[10]变量怎么办?这样做:MyClasscl=newMyClass()...意味着MyClass::test的10字节长的内容分配在堆中而不是堆栈中? 最佳答案 会在对象内部分配,这样如果对象在堆上,数组也会在堆上;如果对象在栈上,数组也会在栈上;如果对象在可执行文件的静态内存中,数组也会在

c++ - 识别地址是否属于堆或堆栈或寄存器

我有一个指向C/C++变量的指针。是否可以准确判断出该变量属于内存的哪一段?如果是,如何?注意:我只有这个变量的地址,如果变量是本地/全局等,则没有更多信息。 最佳答案 查明您的体系结构是否有指向您的堆或堆栈区域的指针。通常有一些stackpointers或者framepointers..然后将您的实际地址与这些地址进行比较,并确定它们属于何处。 关于c++-识别地址是否属于堆或堆栈或寄存器,我们在StackOverflow上找到一个类似的问题: https:

c++ - 如何检查指针指向 iOS 上的堆或堆栈内存?

这类似于anotherquestion,无论如何我正在寻找一种特定于平台的方法来执行此操作(如果它存在于iOS上)。为Apple平台开发意味着基于非Apple的工具集通常不太适用。所以我希望找到平台本地方式来做到这一点。因为简单的谷歌搜索给了我this(heapcommand),我确定也有一个API函数。我正在寻找这个仅用于调试构建断言以检测删除堆栈分配对象的情况。所以知道地址指向哪里就足够了——栈还是堆。因此性能、版本兼容性、内部API或任何质量问题都无关紧要。(也许在模拟器上测试也是一种选择)但我认为如果堆栈与堆完全分离,这并不是那么繁重的操作。我标记了C++,但如果适用于C++,

如果变量属于堆或堆栈,我可以通过 GDB 找到吗?

我的断点指向一个变量。(指向某处。我可以弄清楚某处是堆还是堆栈?)有什么方法可以找到堆栈的开始和结束位置?有什么办法可以找到堆的开始和结束位置? 最佳答案 使用infoprocmappings获取关于内存布局的/proc信息。 关于如果变量属于堆或堆栈,我可以通过GDB找到吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5247037/

如果变量属于堆或堆栈,我可以通过 GDB 找到吗?

我的断点指向一个变量。(指向某处。我可以弄清楚某处是堆还是堆栈?)有什么方法可以找到堆栈的开始和结束位置?有什么办法可以找到堆的开始和结束位置? 最佳答案 使用infoprocmappings获取关于内存布局的/proc信息。 关于如果变量属于堆或堆栈,我可以通过GDB找到吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5247037/

c++ - 使用堆或堆栈变量更好吗?

一位有经验的C++用户告诉我,我应该努力使用堆变量,即:A*obj=newA("A");相对于:Aobj("A");除了所有关于使用指针的优点和灵active之外,他说最好把东西放在堆上而不是堆栈上(堆栈比堆小吗?)。这是真的吗?如果有,为什么?注意:我知道生命周期的问题。假设我已经适本地管理了这些变量的生命周期。(即,唯一关注的标准是堆与堆栈存储,没有生命周期问题) 最佳答案 根据上下文,我们可以考虑堆或堆栈。每个线程都有一个堆栈,线程通过调用函数来执行指令。当一个函数被调用时,函数变量被压入堆栈。并且当函数返回堆栈回滚并回收内存

c++ - 使用堆或堆栈变量更好吗?

一位有经验的C++用户告诉我,我应该努力使用堆变量,即:A*obj=newA("A");相对于:Aobj("A");除了所有关于使用指针的优点和灵active之外,他说最好把东西放在堆上而不是堆栈上(堆栈比堆小吗?)。这是真的吗?如果有,为什么?注意:我知道生命周期的问题。假设我已经适本地管理了这些变量的生命周期。(即,唯一关注的标准是堆与堆栈存储,没有生命周期问题) 最佳答案 根据上下文,我们可以考虑堆或堆栈。每个线程都有一个堆栈,线程通过调用函数来执行指令。当一个函数被调用时,函数变量被压入堆栈。并且当函数返回堆栈回滚并回收内存
12