![](/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.