簡體   English   中英

在C中重復使用struct是一個好習慣嗎?

[英]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對象,它的地址可以看到。 因此,在您的示例中, nodenode->sec_node在調用外部函數之前和之后可能具有不同的值。

緩解這種情況的一種方法是使用像你一樣的臨時值,但你也可以使用restrict關鍵字作為編譯器的一個承諾,在restrict限定指針的生命周期中,指向對象不會是除了通過指向“基於” restrict指針訪問。 如何做到這一點可能超出了這個問題的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM