堆栈大小可以动态更改 - 如何?

时间:2010-02-12 09:49:03

标签: c stack

可以在C中动态更改堆栈大小吗?

如果是,怎么样?

6 个答案:

答案 0 :(得分:3)

这取决于您使用的操作系统。

在Unix / Linux上,您可以使用POSIX系统调用setrlimit()作为RLIMIT_STACK资源。

有关详细信息,请参阅man setrlimit

答案 1 :(得分:2)

动态地表示在代码执行时更改堆栈大小? AFAIK,无法做到。但是,您可以在运行应用程序之前设置堆栈大小。您可以使用linux中的“ulimit -s”命令来完成此操作,该命令将设置在该shell下执行的所有进程的堆栈大小。

通过在项目属性 - >链接选项 - >输出 - >堆栈分配 - >保留中设置堆栈大小,可以在VC6中为该项目完成相同的操作。我不知道VC8,但可能有这样的选项。

答案 2 :(得分:1)

在Linux下的单线程程序中,堆栈将自动增长,直到它崩溃到内存空间中的其他内容。这通常是堆,在32位系统上,这意味着通常可以有几GB的堆栈。

在多线程程序中,这通常不可能,因为另一个线程的堆栈将会阻碍。

您可以在创建新线程时控制堆栈大小,但这通常是一个坏主意,因为它取决于体系结构需要多少堆栈。

这是非常低级的东西,主要由你的C库/线程库控制。处于危险之中:)

答案 3 :(得分:0)

一般情况下,由于需要为堆栈保留地址空间,所以无法做到这一点。如果对象已经在堆上分配了地址在新的所需堆栈范围内,那么您将遇到大麻烦。在内存少于地址空间的系统上,它是可能的,但我怀疑你会看到许多允许它的系统。 C不要求也不支持任何此类机制。

答案 4 :(得分:-1)

不,这超出了C的范围。

答案 5 :(得分:-2)

你为什么需要这样做?它取决于操作系统,而不是C本身直接参与的东西(尽管特定的链接器和运行时环境有不同的方式来管理这些事情的配置)。

你有什么操作系统,你想要实现什么目标?