减少堆栈负载,C中的内存分配,并轻松地转换malloc()的返回值

Dor*_*Dor 0 c malloc stack overflow

  1. 众所周知,大的本地/全局变量可能导致堆栈溢出.我知道在内存中使用指针和分配空间有助于克服这个问题.但这是唯一的选择吗?如果我在全球范围内拥有(或需要)太多指针,会发生什么?

  2. 关于堆栈空间:全局struct-type变量是否在堆栈中占用空间,或者像指针一样?我是否需要创建结构变量类型的指针以减少堆栈负载?

  3. 以下代码是否也将内存分配给名为的char**变量BIG

    // in the header file  
    typedef struct myStruct {  
        BIG[256][256];  
        int baz;  
    } myStruct;
    
    // in the c file  
    myStruct* foo;  
    foo = (myStruct*) malloc( sizeof(*foo) ); 
    
  4. 如何轻松转换返回值malloc()?问题#3我写道:

    foo = (myStruct*) malloc( sizeof(*foo) );

    但我更喜欢写一些类似的东西:

    foo = (foo) malloc( sizeof(*foo) ); // the compiler reports an error

    这将减轻编辑代码时的痛苦(更改类型时foo).

英语不是我的母语,对于任何不清楚都很抱歉.

小智 5

  1. 全局不会在堆栈上创建.

  2. 见1.

  3. 是.

  4. 您可以省略强制转换:

    foo = malloc(sizeof(*foo));