【发布时间】:2017-07-22 08:44:09
【问题描述】:
我有一个需要外部参数的函数,然后创建在该函数内部大量使用的变量。例如。代码可能如下所示:
void abc(const int dim);
void abc(const int dim) {
double arr[dim] = { 0.0 };
for (int i = 0; i != dim; ++i)
arr[i] = i;
// heavy usage of the arr
}
int main() {
const int par = 5;
abc(par);
return 0;
}
但是我得到一个编译器错误,因为堆栈上的分配需要编译时常量。当我尝试使用 _malloca 在堆栈上手动分配时,代码的时间性能变差了(与我在 abc() 函数中声明常量 par 的情况相比)。而且我不希望数组 arr 在堆上,因为它应该只包含少量的值,并且它会在函数内部经常使用。有没有办法在保持将数组的大小参数传递给函数的可能性的同时结合效率?
编辑:我正在使用 MSVC 编译器,但收到错误 C2131:表达式在 VC 2017 中未计算为常量。
【问题讨论】:
-
C99居然支持变长数组,这是哪个编译器?
-
您需要将其标记为
constexpr或使用模板参数。 -
请准确选择一种编程语言。
-
在这个函数的运行之间大小会改变吗?您是否考虑过将其设为函数中的静态变量,或者将其分配到外部并将其传递给您的函数?
-
你得到了一个错误 - 该错误的内容与问题有些相关...... 逐字内容。
标签: c arrays performance