1

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

4

1 回答 1

2

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

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

  1. 在 main 开始时,复制argv到新分配的内存。
  2. 然后创建一个具有所需堆栈大小的新线程,并将argv. 如果所需的大小不可用,这将失败并报告错误。
  3. main在新线程中,使用 new重新调用argv,但设置全局标志以避免重复步骤 1/2。
  4. pthread_exit从最初的“主线程”开始,并将您的新线程视为“主线程”。
于 2011-09-29T03:46:04.090 回答