大多数本地尺寸可在当地使用

时间:2011-09-29 03:38:23

标签: c local-variables

使用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 上限?

1 个答案:

答案 0 :(得分:3)

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

编辑:这是一个“便携式”(到POSIX系统)方式的想法,以确保您在主线程的堆栈上拥有所需的空间:

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