问题标签 [stack]
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++
所以,我需要一些帮助。我正在使用 C++ 开发一个项目。但是,我想我已经设法破坏了我的堆。这是基于我将 an 添加std::string
到一个类并为它分配另一个值的事实std::string
:
我的系统因堆栈转储而崩溃。所以基本上我需要停下来检查我所有的代码和内存管理的东西,找出我搞砸的地方。代码库仍然很小(大约 1000 行),所以这很容易做到。
尽管如此,我还是对这种东西感到头疼,所以我想我会把它扔在那里。我在 Linux 系统上使用valgrind
,虽然不完全知道我在做什么,但它确实报告了std::string
' 的析构函数是无效的。我不得不承认从谷歌搜索中得到了“堆损坏”这个词;任何关于这类东西的通用文章也将不胜感激。
(在之前rm -rf ProjectDir
,在 C# 中再次执行:D)
编辑:我还没有说清楚,但我要的是诊断这类内存问题的建议。我知道 std::string 的东西是正确的,所以这是我做过的事情(或者是一个错误,但 Select 没有问题)。我确信我可以检查我编写的代码,你们非常聪明的人很快就会发现问题,但我想将这种代码分析添加到我的“工具箱”中,就像它一样。
c++ - 如何防止在堆上创建对象?
有谁知道我可以如何在独立于平台的 C++ 代码中阻止在堆上创建对象?也就是说,对于“Foo”类,我想阻止用户这样做:
并且只允许他们这样做:
有没有人有任何想法?
干杯,
c - 检查 C 中可用的堆栈大小
我将 MinGW 与 GCC 3.4.5(mingw-special vista r3)一起使用。
我的 C 应用程序使用了很多堆栈,所以我想知道有什么方法可以通过编程方式告诉我还剩下多少堆栈,这样如果我发现我即将用完,我就可以干净地处理这种情况。
如果不是,您还有什么其他方法可以解决可能耗尽堆栈空间的问题?
我不知道我将从多大的堆栈开始,所以也需要以编程方式识别它。
linux - 测量 Linux 多线程应用程序的堆栈使用情况
我正在为 Linux 嵌入式平台开发一个多线程应用程序。
目前,我将每个线程的堆栈大小(通过 pthread_set_attr)设置为一个相当大的默认值。我想将每个线程的值微调为更小的值,以减少我的应用程序的内存使用量。我可以通过反复试验将每个线程的堆栈大小设置为逐渐减小的值,直到程序崩溃,但是应用程序使用约 15 个线程,每个线程具有完全不同的功能/属性,因此这种方法非常耗时。
我更喜欢能够直接测量每个线程的堆栈使用情况。是否有一些实用人员可以推荐这样做?(例如,我来自 vxWorks 背景,使用 vxWorks shell 中的 'ti' 命令直接提供堆栈使用情况的统计信息以及有关任务状态的其他有用信息。)
谢谢
c - 在 C 中挂钩到 TCP 堆栈
这不仅仅是我想要在这里进行的捕捉。我想首先捕获数据包,然后实时检查特定数据的有效负载,将其删除,注入签名并将数据包重新注入堆栈以像以前一样发送。
我阅读了使用 IPFW 的 ipfw 转移套接字,它看起来很有希望。修改数据包并使用转移套接字将它们重新注入堆栈的示例怎么样?另外,出于好奇,是否可以使用 Java 从套接字读取数据,或者这是否会限制我打包和重新注入等?
algorithm - 如何使用两个堆栈实现一个队列?
假设我们有两个堆栈并且没有其他临时变量。
是否可以仅使用两个堆栈来“构建”队列数据结构?
memory-management - 堆栈和堆是什么以及在哪里?
编程语言书籍解释了值类型是在堆栈上创建的,而引用类型是在堆上创建的,但没有解释这两个东西是什么。我还没有阅读对此的明确解释。我明白什么是堆栈。但,
- 它们在哪里,是什么(物理上在真实计算机的内存中)?
- 它们在多大程度上受操作系统或语言运行时的控制?
- 他们的范围是什么?
- 是什么决定了它们每个的大小?
- 是什么让一个更快?
.net - IIS 中 .NET 代码的堆栈溢出,但 Winforms 中没有
所以我有一个令人讨厌的堆栈溢出,我在过去 8 小时左右一直试图追踪/解决,我正处于我认为我需要建议的地步。
细节:有趣的是,当在我们的常规 winforms 应用程序的上下文中调用时,这段代码运行良好——但我的任务是编写我们软件的基于 Web 的版本,当从在 IIS 上运行的 ASPX 页面。我做的第一件事是附加并尝试通过 Visual Studio 进行正常的 .NET 调试。在异常点,调用堆栈似乎相对较浅(我们的代码大约 11 帧深),我找不到堆栈溢出的常见嫌疑人(错误的递归、自调用构造函数、异常循环)。
所以我放弃了自己去打破windbg和SOS——我知道这对这类事情很有用,尽管我自己的经验有限。经过几个小时的闲逛,我想我有一些有用的数据,但我需要一些帮助来分析它。
首先是一个!dumpstack,我在堆栈溢出即将下降之前被破坏了。
那里有很多东西,但在我的(诚然有限的)堆栈分析知识中没有任何东西表明循环。我认为下一节可能有一些价值。这是我在同一断点处得到的 !dumpstackobjects :
^^ 我不得不剪掉上面的一些内容以使这篇文章适合,但想象一下它会继续这样下去^^
请忽略我们自定义代码的详细信息。这一切对我来说似乎都是多余的,但我不是堆栈专家。上面列出的大多数堆栈对象(有 1500 多个)不是函数参数,所以我认为它们不属于那里。这是在堆栈上生成所有这些项目的代码类型的示例(运行大量这样的代码):
我也不是 VB 专家(这段代码来自我通常不使用的应用程序的不同部分),但是这样的代码用东西填满堆栈是否正常?如果有人有任何见解,或者甚至可以向我指出一些资源的方向以及有关此类东西的信息,将不胜感激。感谢您的关注!
c# - ++ 何时不会产生与 +1 相同的结果?
以下两个 C# 代码片段产生不同的结果(假设变量 level 在递归调用之前和之后都使用)。为什么?
,
在阅读了下面的一些回复后,我认为发布 level++、++level 和 level+1 的堆栈跟踪是值得的,以突出这个问题的欺骗性。
我已经为这篇文章简化了它们。递归调用序列从 DoStuff(1) 开始。
// 级别++
// ++级
// 等级+1
c - 如何通过良好的设计保留堆栈空间?
我正在用 C 语言为带有 RTOS 的 RAM 受限嵌入式微控制器编程。
我经常将我的代码分解为短函数,但每个函数调用都需要更多的堆栈内存。每个任务都需要他的堆栈,这是项目中重要的内存消耗者之一。
是否有替代方法可以使代码保持良好的组织性和可读性,同时保留内存?