在C中重复使用struct是一种好习惯吗?

时间:2018-10-05 16:34:30

标签: c performance struct

假设我具有来自不同头文件的这两个结构:

  

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,在这里使用temp变量会更快/更好吗?

C语言在性能方面是否有差异?

void main()
{
   int temp = node->sec_node->var;
   for (int i = 0; i < 1000; i++)
      printf( "%d\n", temp);
}

1 个答案:

答案 0 :(得分:4)

这不是,但它可能是优化瓶颈的来源。因为编译器看不到外部函数的定义(例如printf,尽管它可能因为标准函数而知道其内建属性),所以它必须假定任何外部函数都可以修改任何非{{1 }}对象,可以看到其地址。这样,在您的示例中,constnode在调用外部函数前后可能具有不同的值。

减轻这种情况的一种方法是使用类似的临时操作,但是您也可以使用node->sec_node关键字作为对编译器的承诺,即在restrict的生存期内-限定的指针,除非通过“基于” restrict限定的指针的指针,否则不会访问该指向的对象。如何执行此操作可能不在此问题的范围内。