问题标签 [stack-size]

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 投票
3 回答
5015 浏览

c - 安全线程堆栈大小?

我正在编写一些产生相当多线程的代码(目前大约有 512 个,但将来可能会更高)。每个线程只执行少量操作,因此我希望将线程置于系统上的开销保持在最低限度。

我正在使用 设置堆栈大小pthread_attr_setstacksize(),并且可以从中获得允许的最小堆栈大小PTHREAD_STACK_MIN。但我的问题是:使用PTHREAD_STACK_MIN线程堆栈大小是否安全?我该如何计算我需要多少堆栈?是否有任何隐藏的开销需要添加到我的计算中?

另外,我可以使用其他技术来减少线程对系统的负担吗?

0 投票
1 回答
1773 浏览

assembly - 我是否在实模式下正确设置了堆栈段?

我正在编写一个引导加载程序,并这样设置我的堆栈......

我这样做是否分配了 1024 字节的堆栈空间?是否适合在 0x00900 加载其他内容?0x00900 应该在我的堆栈数据之后...

0 投票
5 回答
20466 浏览

java - 64 位 Linux 上的 Java 线程堆栈大小

我的目标是提出可以并行运行的最大线程数。谷歌向我指出了许多链接,它们通过划分 RAM/StackSize 给出了简单的数学计算。在 64 位 Linux 中,我们将线程堆栈大小定义为 10 MB(ulimit -s = 10240kb),RAM 为 4GB,为操作系统留出 1 GB 空间,根据这个数学计算,我可以拥有大约 300 个线程,但我的测试应用程序很小写到〜32297,然后给出内存不足错误。

我用 -Xss 尝试了不同的值,但这些值对线程数几乎没有任何影响,它与 ~32297 相同)。

这给了我一个印象,堆栈大小是可变的,由操作系统决定,并在需要时达到我们定义的最大值,但无论我在哪里阅读,它们的堆栈大小都是静态的

我到底在这里想念什么?

0 投票
2 回答
172 浏览

java - Java中堆栈中函数调用次数的限制是如何定义的?

我最近一直在寻找一个具有 2000 个递归函数调用的深堆栈,并且想知道 Java 堆栈中函数调用数量的限制是如何定义的?

0 投票
2 回答
532 浏览

c - 有什么方法可以用 C 语言获取文件或项目中所有函数的堆栈大小?

我想获取堆栈大小大于分配大小的所有函数,有什么简单的方法可以建议吗?

获取.obj文件,反汇编,然后分析输出文件?

0 投票
2 回答
1318 浏览

c - 在发生堆栈溢出之前剩余堆栈的大小

在 Linux 上,使用 C,假设我有一个动态确定n的命名元素的数量,我必须在一个数组int my_array[n](百字节)。

大多n是很小的,十分之几。但有时n可能很大,高达 1000 或 1'000'000。

如何计算我的堆栈是否可以容纳n*o + p字节而不溢出?

基本上:我的堆栈上还剩下多少字节?

0 投票
0 回答
1694 浏览

c++ - 如何增加 Xcode 4.1 中的堆栈大小?

问题是我想增加堆栈大小,因为命令行项目(c++)中数组的最大大小是 32767 项,(请不要问我为什么需要那个大小的数组),我已经已经用 malloc 创建了一个指针,以便创建一个比它更大的“数组”,但它完全一样,这就是为什么我需要增加堆栈大小的原因。. .

我还尝试将我的数组分成两部分以创建一个矩阵(将一个大小为 10000 的数组转换为一个 [100][100] 的矩阵,然后将指针设置为数组的开头以模拟一个向量),与此问题完全相同,直到我尝试超过 32768 个项目之前,我都可以正常工作。

(PS 解决方案在这里 ->使用 XCode <- 增加堆栈大小,但我在 Xcode 4.1 中找不到该选项)

提前致谢!!!

0 投票
2 回答
642 浏览

c - 为什么 GCC 为不同范围的本地联合分配单独的堆栈空间?

考虑以下代码:

对于 x86 是按原样编译的(意味着 testme 是一个结构),编译器为 main 分配的堆栈大小是 16 字节。

但是,使用定义为 union 的 TRY 编译(意味着 testme 是一个 union),编译器为 main 分配的堆栈大小为 32 个字节:

此外,在附加作用域中定义的结构/联合的任何附加实例在使用联合时会产生更大的堆栈分配,但在用作结构时不会扩大堆栈分配。

现在,这没有意义 - 联合应该占用更少的堆栈空间,如果有的话,而不是更多,然后是具有相同字段的结构!

即使在不同的范围内,GCC 似乎也将联合视为同时使用,但对结构却不这样做。

更多说明:

  1. volatile 用于阻止编译器优化分配。释放 volatile 并在没有优化的情况下进行编译会产生相同的结果。

  2. 即使 testme 是一个具有联合作为成员之一的结构,也会观察到相同的行为。换句话说 - 一个结构的成员之一是 GCC 的一个联合就足够了,可以进行单独的堆栈分配。

  3. 编译器是 gcc 版本 4.4.3 (Ubuntu 4.4.3-4ubuntu5),但其他体系结构的其他 GCC 版本表现出相同的行为。

  4. checkstack.pl 只是在 objdump 输出中搜索用于分配堆栈的指令(堆栈指针的子目录)。

我的问题:

  1. 为什么 GCC 会这样做?这是一个错误还是有这种行为的原因?
  2. 假设这不是一个错误,有没有办法解决这个问题并强制 GCC 为与联合相同的结构分配堆栈。

澄清:我的问题不是为什么结构或联合的大小看起来比它的部分更大。我知道原因是填充对齐。我的问题是编译器为联合的不同实例分配多个堆栈帧,即使它们是在不同的范围内定义的,而对于具有相同字段的结构,它不应该而且确实不这样做。

谢谢!

0 投票
2 回答
4056 浏览

java - 在运行时更新 java 线程的堆栈大小

有谁知道是否有办法动态(运行时)增加主线程的堆栈大小?另外,我相信这是同一个问题,是否可以Thread在实例化后增加/更新 a 的堆栈大小?

Thread的 CTOR 允许定义其堆栈大小,但我找不到任何更新它的方法。实际上,我在JDK中没有发现任何堆栈大小的管理(这往往表明这是不可能的),一切都在VM中完成。

根据java 语言规范,可以在“创建堆栈时”设置堆栈大小,但有一个注释:

Java 虚拟机实现可以为程序员或用户提供对 Java 虚拟机堆栈的初始大小的控制,以及在动态扩展或收缩 Java 虚拟机堆栈的情况下,对最大和最小大小的控制。

IMO 不是很清楚,这是否意味着某些 VM 处理具有最大(编辑)堆栈大小的线程在给定范围内演变?我们可以用 Hostpot 做到这一点吗(我在 Xss 旁边没有找到任何与堆栈大小相关的选项)?

谢谢 !

0 投票
2 回答
5961 浏览

mingw - 使用大型预编译头文件时 cc1plus.exe 崩溃

我在使用 MinGW 的预编译头文件时遇到问题。编译器似乎找到了预编译的头文件,但 cc1plus.exe 在之后立即崩溃(cc1plus.exe 已停止工作)。

我知道这可能与 cc1plus.exe 的低堆栈大小有关,所以我做了以下操作来增加它:

我也试过无济于事:

然而,这并没有解决它,因为每当我尝试编译我的应用程序时它仍然会崩溃。

顺便说一句,如果重要的话,我正在使用最新的 MinGw (gcc v 4.6.2) 和最新的 Eclipse CDT。

我是否正确增加了 cc1plus.exe 的堆栈大小?有没有人知道如何继续,因为我阅读了无数的文章和主题,但我目前有点没有想法。

g++ 似乎找到并接受了我的预编译头文件:

这是我作为预构建 make 运行以生成我的 .gch 的 makefile:

.gch 的大小超过 169 MB,因为我正在尝试预编译大多数 Ogre3D 和 CEGUI 头文件。

谢谢你,亚当。