增加堆栈大小:典型问题?

时间:2014-11-05 18:45:33

标签: c gcc memory-management

我正在编写一个用gcc编译的游戏和实时应用程序的通用框架。为了提高效率,我希望将所有核心框架结构实例分配到堆栈中。

根据使用框架构建的项目的大小,似乎在某些情况下,堆栈大小可能需要从典型的默认值(1-2 MB?)增加。

可以在gcc支持的所有平台上更改堆栈大小吗?操作系统是否存在硬限制,以防止堆栈大小增加?增加堆栈大小时是否还有其他典型问题,包括使用多个线程时?

1 个答案:

答案 0 :(得分:0)

(至于我的问题到目前为止缺乏答案,我在研究这个问题时发现了一些值得注意的要点......)

gcc可以为相关的可执行文件设置堆栈大小,但仅适用于Windows可执行文件,不是 * nix / ELF二进制文件。显然,MSVC可以为Windows可执行文件执行相同的操作。

在* nix下,需要使用ulimit -s <sizeMB>设置堆栈大小,这适用于此后运行的所有可执行文件,而不是特定于Windows案例中的某个可执行文件。或者在创建POSIX线程之前,pthread_attr_setstacksize()可用于为这些线程设置默认堆栈大小。在其他人分享他们的经验之前,我只能假设对于包括Android,MacOS,iOS,PlayStation(全部)在内的所有(游戏)平台,以上内容将适用。

除了系统特定的硬件限制外,堆栈大小应该没有上限;特别是在* nix下,ulimit -s unlimited可以设置动态的,理论上无限的运行时堆栈大小。

尽管如此,我还是留给评论者提请我注意相关问题或不正确的假设