【发布时间】:2014-09-12 17:11:31
【问题描述】:
在 C 中,结构通常通过指针传递,以防止数据被复制太多。
我想知道,这真的很重要吗?编译器不会阻止不必要的复制吗?
例如,如果我将一个变量标记为 const,编译器是否会将副本优化掉?
例子
struct my_t {
int a;
int b[24];
}
int generate_updated_myt(const my_t c) {
// do something with c
return 0;
}
int generate_updated_myt(const my_t * c) {
// do something with *c
return 0;
}
一般来说,这两者之间会有速度差异吗?
【问题讨论】:
-
为什么不自己试试呢?将这两件事都做几百万次,然后测量所花费的时间。
-
@Peter Smit - 查看以下链接,看看它是否回答了您的问题 - 链接 1 - stackoverflow.com/questions/212237/… 链接 2 - stackoverflow.com/questions/6313730/…
-
哦,作为我之前评论的补充,你应该在构建时尝试不同的优化级别。
-
@JoachimPileborg 是个好主意,但这将是一个数据点——可能是一个异常的数据点——也许其他硬件/编译器/操作系统会有完全不同的结果。
-
如果您倾向于测试,您可以尝试不同大小的结构(16 字节、128 字节、1kb、16kb 等)