繁体   English   中英

在C语言中,结构数组是否在堆栈中分配?

[英]In C, does an array of a structure gets allocated in the stack?

我认为这可能是一个非常愚蠢的问题,但我只想澄清一下。 提前致谢! 我不确定在函数内部是否声明为局部变量的结构数组在堆栈中分配。 不是吗

确实如此; 您声明而不分配自己的任何内容(例如,通过调用malloc )或声明为静态的(如Fernando所说 )都分配在堆栈上。 结构只是将多个变量组合在一起的一种方式。 它们仍然具有固定的大小(元素的总大小,可能还要加上一些填充),并且访问结构的字段仅意味着从结构内的某个位置提取适当的字节

是的,将在堆栈中分配在函数范围中声明为自动变量的数组。 您这样做时要明智,因为您将无法从调用上下文确定是否有足够的堆栈空间来成功。 即使Windows默认情况下为线程创建1MB堆栈,Linux默认情况下为8MB堆栈创建,但是如果您创建大型结构数组,仍然会遇到问题。 在某些操作系统中,线程堆栈可能只有几kB。

我倾向于将函数范围自动变量限制为简单的标量类型,并在堆上放置大型抽象类型和数组。

除非您使用malloc()(如@Michael Mrozek所说)或使用“静态”修饰符声明它,否则它将在堆栈中分配。

就像其他变量一样:

void function()
{

    struct my_struct a; // in the stack;
    struct my_struct *b = malloc(sizeof(struct my_strcut)); // not in the stack;
    static struct my_struct c; // not in the stack;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM