【问题标题】:most local size useable locally大多数本地大小可在本地使用
【发布时间】:2011-11-27 09:02:21
【问题描述】:

使用 GCC(Windows 32,仅限 C,默认构建选项)。

我的本​​地堆栈的最大大小是多少..?

例如:

void myfunc (void)
{
char is_this_too_big_for_a_local_var[64*1024*1024];

somefunc(is_this_too_big_for_a_local_var);
}

可能来自我早期编码期间的一些创伤经历,我已经 从未尝试使用最多超过 16k 的本地存储。(是的,习惯 在 286 年代,16 位计算机的日子里拿起)..

无论如何,在本地定位非常大的变量好吗?还是还有几K 上限?

【问题讨论】:

    标签: c local-variables


    【解决方案1】:

    即使您的系统有很大的堆栈,您也不应该养成使用它的习惯。一旦你想在多线程程序中使用具有大堆栈帧的代码就会出现问题,因为每个线程的堆栈需要足够大以容纳最大可能的堆栈使用,并且创建线程的代码将要使用@987654321 @ (或等效项)以避免在每个线程上花费更多的虚拟地址空间和提交费用。

    编辑:这是一种“可移植”(针对 POSIX 系统)方式的想法,以确保您在主线程的堆栈上拥有所需的空间:

    1. 在main的开头,将argv复制到新分配的内存中。
    2. 然后创建一个具有所需堆栈大小的新线程,并将argv 的副本传递给它。如果所需大小不可用,这将失败并报告错误。
    3. 在新线程中,使用新的 argv 重新调用 main,但设置全局标志以避免重复步骤 1/2。
    4. pthread_exit 来自最初的“主线程”,并将您的新线程视为“主线程”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-07
      • 2021-04-16
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2011-03-14
      • 2023-03-07
      相关资源
      最近更新 更多