![](/img/trans.png)
[英]Is it good programming practice to use setjmp and longjmp in C?
[英]Is it a good practice to repeatedly use struct in C?
假设我有两个结构来自不同的头文件:
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);
}
它并不坏 ,但它可能是优化瓶颈的来源。 因为编译器无法看到外部函数的定义(比如printf
,虽然它可能知道它的属性是内置函数,因为它是一个标准函数),但它必须假设任何外部函数都可以修改任何非const
对象,它的地址可以看到。 因此,在您的示例中, node
或node->sec_node
在调用外部函数之前和之后可能具有不同的值。
缓解这种情况的一种方法是使用像你一样的临时值,但你也可以使用restrict
关键字作为编译器的一个承诺,在restrict
限定指针的生命周期中,指向对象不会是除了通过指向“基于” restrict
指针访问。 如何做到这一点可能超出了这个问题的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.