【发布时间】:2012-04-25 22:55:34
【问题描述】:
假设 buffer 是一个由多个成员组成的结构,包括一个数组。
使用通常的优化标志进行编译,运行这两个代码 sn-ps 应该会有什么样的性能差异?
buffer buf;
for (int i = 0; i < BIG_ENOUGH_NUMBER; i++) {
init(huge_file, i, &buf);
}
// buf is not used afterward
...
void init(FILE* f, int i, buffer* b) {
... // b is filled using f, according to i
do_something(b);
}
对
for (int i = 0; i < BIG_ENOUGH_NUMBER; i++) {
init(huge_file, i);
}
...
void init(FILE* f, int i) {
buffer buf;
... // buf is filled from scratch using f, according to i
do_something(&buf);
}
【问题讨论】:
-
每次迭代保留或重建
buf中的多少数据/状态? -
第二个例子没有声明b?那应该是buf吗?
-
在堆栈上放置一个大缓冲区当然会导致堆栈溢出。
-
您可以假设创建缓冲区不会破坏堆栈。
标签: c performance struct compiler-optimization