问题标签 [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.

0 投票
19 回答
70673 浏览

c++ - 奇怪的 MSC 8.0 错误:“ESP 的值未在函数调用中正确保存......”

我们最近尝试将我们的一些 Visual Studio 项目分解为库,并且在一个测试项目中,一切似乎都可以很好地编译和构建,其中一个库项目作为依赖项。但是,尝试运行该应用程序给了我们以下令人讨厌的运行时错误消息:

运行时检查失败 #0 - ESP 的值未在函数调用中正确保存。这通常是调用使用不同调用约定声明的函数指针的结果。

我们甚至从未为我们的函数指定调用约定(__cdecl 等),将所有编译器开关保留为默认值。我检查了项目设置对于跨库和测试项目的调用约定是一致的。

更新:我们的一位开发人员将“Basic Runtime Checks”项目设置从“Both (/RTC1, equiv. to /RTCsu)”更改为“Default”,运行时消失了,程序显然运行正常。我完全不相信这一点。这是一个适当的解决方案,还是一个危险的黑客攻击?

0 投票
7 回答
13826 浏览

networking - OSI 模型 - 表示层和会话层有什么用?

所以我觉得我非常了解应用层,以及传输层以下(包括)的所有内容。

但是,我并不完全理解会话层和表示层。我已经阅读了 Wikipedia 中的简单描述,但它没有一个示例说明为什么分离这些层是有用的。

所以:

  • 什么是会话层?它有什么作用,在什么情况下拥有一个会话层比简单地与您的应用程序与传输通信更好?
  • 什么是表示层?(与上述相同的问题)

-亚当

0 投票
4 回答
28637 浏览

windows - 在 Windows (GCC) 上增加堆栈大小

有没有办法在使用 GCC 的编译/链接时增加 Windows 应用程序的堆栈大小?

0 投票
23 回答
130418 浏览

c++ - 哪个更快:堆栈分配或堆分配

这个问题听起来可能相当初级,但这是我与另一位共事的开发人员进行的辩论。

我小心翼翼地在可能的地方堆栈分配东西,而不是堆分配它们。他正在和我说话,看着我的肩膀并评论说这没有必要,因为它们在性能方面是相同的。

我一直认为堆的增长是恒定的时间,堆分配的性能取决于堆的当前复杂性,用于分配(找到适当大小的孔)和取消分配(折叠孔以减少碎片,如如果我没记错的话,许多标准库实现在删除期间需要时间来执行此操作)。

这让我觉得可能非常依赖编译器。特别是对于这个项目,我将Metrowerks编译器用于PPC架构。了解这种组合会很有帮助,但总的来说,对于 GCC 和 MSVC++,情况如何?堆分配的性能不如堆栈分配吗?没有区别吗?或者差异如此之小以至于变得毫无意义的微优化。

0 投票
2 回答
395 浏览

macos - OSX Leopard 扩展坞的自定义堆栈的命令行语法是什么?

我知道除了默认提供的“下载”之外,还有一种用于将自定义堆栈添加到 OSX Leopard 扩展坞的命令行语法。它是什么?

0 投票
1 回答
6937 浏览

winapi - 如何确定最佳线程堆栈大小?

实际上,有两种大小:最初提交的和总保留的。

您使用静态分析还是动态分析?哪些工具?有哪些技巧?

0 投票
3 回答
418 浏览

c - 堆栈内存读取

使用以下代码:

调用该函数时,它在 SPARC 机器上运行正常,但在运行 Solaris 10 的 i386 上出现 段错误fileName。假设是一个以空字符结尾的字符串,大约 30 个字符。似乎尝试读取超出使用范围fileNamememcpy()触发某些系统上的分段错误。

它是遗留代码,易于纠正。但我想知道的是可能导致失败与否的潜在特征。它与堆栈上的读取冲突有关吗?一些跨界?它与内存分段有关,它是否只是偶然的情况(取决于内存管理和操作系统如何完成内存分段/分页。)它可能会失败。

0 投票
5 回答
7548 浏览

operating-system - 内核开发中使用的堆栈大小

我正在开发一个操作系统,而不是编写内核,我正在设计内核。该操作系统针对 x86 架构,而我的目标是针对现代计算机。所需 RAM 的估计数量为 256Mb 或更多。

使每个线程的堆栈在系统上运行的合适大小是多少?我是否应该尝试以这样一种方式设计系统,即如果达到最大长度,堆栈可以自动扩展?

我想如果我没记错的话,RAM 中的一个页面是 4k 或 4096 字节,这对我来说似乎并不多。我绝对可以看到时间,尤其是在使用大量递归时,我希望一次在 RAM 中拥有超过 1000 个整数。现在,真正的解决方案是让程序通过使用malloc和管理自己的内存资源来做到这一点,但我真的很想知道用户对此的看法。

4k 是否足以容纳现代计算机程序的堆栈?堆栈应该比那个大吗?堆栈是否应该自动扩展以适应任何类型的大小?从实际开发人员的角度和安全的角度来看,我对此都很感兴趣。

4k对于堆栈来说太大了吗?考虑到正常的程序执行,特别是从 C++ 中的类的角度来看,我注意到好的源代码倾向于malloc/new在创建类时提供所需的数据,以最大限度地减少函数调用中抛出的数据。

我什至没有进入的是处理器高速缓存的大小。理想情况下,我认为堆栈将驻留在缓存中以加快速度,我不确定我是否需要实现这一点,或者处理器是否可以为我处理它。我只是打算使用常规无聊的旧 RAM 进行测试。我无法决定。有什么选择?

0 投票
9 回答
30227 浏览

c++ - 如何检测 ac/c++ 程序中可能/潜在的堆栈溢出问题?

是否有一种标准方法可以查看您的应用程序有多少堆栈空间以及在运行期间堆栈使用的最高水印是多少?

同样在实际溢出的可怕情况下会发生什么?

它会崩溃、触发异常或信号吗?所有系统和编译器都有标准还是不同?

我正在专门寻找 Windows、Linux 和 Macintosh。

0 投票
7 回答
27815 浏览

c# - 在 C# 中迭代​​堆栈的最快方法

我觉得使用 GetEnumerator() 和强制转换 IEnumerator.Current 很昂贵。有更好的建议吗?

如果它提供类似的功能和更好的性能,我愿意使用不同的数据结构。

经过思考:
通用堆栈会是一个更好的主意,这样就不需要强制转换了吗?