【发布时间】:2019-03-11 05:10:30
【问题描述】:
假设我有这两个结构来自不同的头文件:
header_1.h
struct main_node {
struct *sec_node
}
header_2.h
struct sec_node {
int var;
}
现在我在main.c 中使用这两个头文件,代码如下所示:
#include <stdio.h>
#include "header_1.h"
#include "header_2.h"
struct main_node *node;
void main()
{
for (int i = 0; i < 1000; i++)
printf( "%d\n", node->sec_node->var) ;
}
假设,我没有使用现代优化编译器。我在这个struct 上循环了很多次,在这里使用临时变量会更快/更好吗?
C 语言在性能方面有什么不同吗?
void main()
{
int temp = node->sec_node->var;
for (int i = 0; i < 1000; i++)
printf( "%d\n", temp);
}
【问题讨论】:
-
编译器会自己优化。
-
您是否有任何来自分析器的信息表明您当前的代码存在瓶颈?如果没有,那就不用担心了。过早的优化是浪费时间。
-
@Sedmaister 那么您的努力可能最好花在将现代优化编译器添加到您的工具链中,而不是自己进行这些优化。如果您想知道它是否更快,为什么不直接运行您的代码并进行测量?
-
如果您的编译器没有对此进行优化,则使用 temp 变量会更快。但在你的情况下,
printf的开销无论如何都会大得多,所以它不会产生任何明显的区别。 -
谁投票决定关闭这个?这实际上是一个相当深的 C 问题。 “坏”这个词可能选得不好,但可以用恰当的方式加以澄清。
标签: c performance struct