Скопировать значение элемента в стек или получить к нему доступ с помощью указателя - PullRequest
0 голосов
/ 01 июня 2018

Итак, я получил структуру, которая содержит целое число.Я обычно создаю эту структуру в куче.Если бы я теперь передал указатель на такую ​​структуру в функцию и использовал бы целочисленный член, было бы быстрее, если бы я сначала скопировал значение членов в стек и использовал эту локальную переменную в функции, или я должен получить доступ к члену черезуказатель?Что потенциально быстрее?Очевидно, я не хочу изменять значение члена.Пример кода:

Пример структуры:

struct sample_s
{
  int sample_member;
}

Путь 1:

void sample_func(struct sample_s *sample_instance)
{
  for(int i = 0; i < 1000; i++)
  {
    printf("%d", sample_instance->sample_member);
  }
}

Путь 2:

void sample_func_two(struct sample_s *sample_instance)
{
  int a = sample_instance->sample_member;
  for(int i = 0; i < 1000; i++)
  {
    printf("%d", a);
  }
}

1 Ответ

0 голосов
/ 01 июня 2018

В вашем конкретном случае sample_func_two - это потенциально быстрее.Это потому, что вы вызываете внешнюю функцию, printf:

printf("%d", sample_instance->sample_member);

Компилятор, вероятно, не знает, что этот вызов не изменит *sample_instance 1 , поэтомуон будет перезагружать sample_member из памяти каждый раз в цикле.

Теперь, что касается фактической разницы во времени выполнения вашей программы, вам придется тестировать ее самостоятельно.


1 Компилятор не знает, потому что он не может видеть код printf (он где-то в библиотеке), а printf не объявлен как чистый.Фактически, printf нельзя объявить чистым, потому что в зависимости от строки формата, которую он может записать через свои аргументы (с %n).

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