代码之家  ›  专栏  ›  技术社区  ›  Awais Chishti

从堆栈-C中删除多余变量++

  •  0
  • Awais Chishti  · 技术社区  · 10 年前

    我有一个递归函数,它在一次调用中声明至少50KB的局部变量,堆栈溢出可能与我需要的递归步骤数相同。然而,当函数在其内部调用时,这些变量就不再需要了。我可以在函数调用之前删除它们,以防止它们消耗多余的堆栈内存吗?我想避免使用堆中的内存。

    3 回复  |  直到 4 年前
        1
  •  2
  •   Bathsheba    10 年前

    如果你 必须 使用递归,然后将这些可循环变量放入 struct ,并传递可重用的 结构 实例(在递归的最外层实例化)。

        2
  •  2
  •   Mats Petersson    10 年前

    有几种可能的解决方案,最有可能的是以某种方式从堆栈中删除变量块,方法是从较低级别传入(从而重用相同的空间),或者使用某种动态分配。

    或者拆分函数,以便在进行递归调用之前返回50kb的分配,如下所示:

    int do_stuff_on_stack()
    {
       large variable;
       ... 
    }
    
    
    int recursive_call()
    {
       int x = do_stuff_on_stack();
    
       if (something)
           int y = recursive_call();
    }
    
        3
  •  1
  •   Benedict    10 年前
    int function(int c) {
        ...
    
        // Use anonymous parentheses to scope stack variables
        {
            int a = ...;
            int b = ...;
            c = ...;
        }
        ...
    
        return function(c);
    }