【发布时间】:2021-01-05 20:18:06
【问题描述】:
这些天我经常使用alloca 来分配临时缓冲区。在我的应用程序(信号处理)中,这是一个常见的需求。
问题是:
在分配多个数组时,只使用一次 alloca 会更好(性能方面)吗?
像这样:
float *array1 = (float*)alloca(4096 * 4);
float *array2 = array1 + 1024;
float *array3 = array2 + 1024;
float *array4 = array3 + 1024;
或者像这样多次使用它:
void *array1 = (float*)alloca(4096);
void *array2 = (float*)alloca(4096);
void *array3 = (float*)alloca(4096);
void *array4 = (float*)alloca(4096);
我的意思是它可能所做的只是减少堆栈指针并可能执行“堆栈探测”,这取决于大小,所以这可能无关紧要?
【问题讨论】:
-
像所有性能问题一样,衡量并找出答案。
-
这可能无关紧要。与大多数性能问题一样,唯一可以确定的方法是同时尝试并衡量。
-
alloca非常危险。宁愿只将它用于非常少量的数据。 -
还要检查和比较编译器为这两种情况生成的代码。
-
哦,请记住在启用优化后进行所有基准测试、测量或组装比较。
标签: c++ performance stack alloca