Является ли хорошей практикой многократно использовать struct в C? - PullRequest
0 голосов
/ 05 октября 2018

Предположим, у меня есть две структуры из разных заголовочных файлов:

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);
}

1 Ответ

0 голосов
/ 05 октября 2018

Это не плохо , но может стать источником узких мест для оптимизации.Поскольку компилятор не может видеть определения внешних функций (например, printf здесь, хотя он может знать о своих свойствах как встроенную, потому что это стандартная функция), он должен предположить, что любая внешняя функция может изменять любой объект, не являющийся const, чейадрес, который он мог видеть.Таким образом, в вашем примере node или node->sec_node может иметь другое значение до и после вызова внешней функции.

Один из способов уменьшить это - использовать временные параметры, как вы делаете, ноВы также можете использовать ключевое слово restrict в качестве обещания компилятору, что в течение срока жизни указателя, квалифицированного restrict, доступ к указанному объекту не будет осуществляться, кроме как через указатели, основанные на restrict Квалифицированный.Как это сделать, вероятно, выходит за рамки этого вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...