是否建议在C中使用带有内联函数的可变长度数组(VLA)?

时间:2017-02-10 22:09:19

标签: c

由于VLA在堆栈上被分配了内存,如果我们内联包含它们的函数会导致任何问题吗?我认为,由于alloca的相同行为,即在堆栈上存储对象,编译器避免内联这些函数(?)。

2 个答案:

答案 0 :(得分:4)

然而(非标准)alloca函数产生一个对象,其生命周期是调用函数,而VLA的生命周期是声明它的块。但是内联与它们中的任何一个都无关。一个函数调用,其内部恰好被内联仍然是一个函数调用,它由alloca获得的对象在语义返回时不再存在,而不是在cpu执行ret指令或等效函数时。

答案 1 :(得分:-3)

我原本以为分配给VLA(您正在使用的结构)的堆栈的任何内存都会以某种方式与为内联函数分配的内存区域不同。此外,当编译或解释内联代码时,这将是处理器/解析器的工作,而不是堆栈的工作。所以简而言之,我会说,不。