2015-06-05 2 views
-1

Есть ли разница в производительности между этим кодом:Разница в производительности между доступа с помощью ссылки или указателя

struct foo example; 

my_function(&example); 

void   my_function(struct foo *example); 

И этот код:

struct foo example; 

my_function(example); 

void   my_function(struct foo &example); 

Я думаю, что оба подхода различны, но есть ли разница в производительности между ними?

+1

Второй снипп недействителен в C. В C. C. – haccks

+0

отсутствует пропуск. Http://stackoverflow.com/questions/6732706/c-passing-arguments-by-reference-and-pointer – Varaquilex

+0

Вы отметили свой вопрос с C, но C не имеет ссылок. Вы имели в виду C++? Кроме того, не должно быть никаких различий в производительности. –

ответ

1

Код, который вы отправили, является C++, а не C, поскольку C не имеет ссылок.

При этом ссылочный тип в C++ вряд ли отличается от указателя, за исключением того, что после инициализации он не может указывать на разные точки (не может хранить разные адреса). Он практически является указателем с семантикой указателя, чтобы получить от указателя к указателю скрытый.

С помощью ссылок вы можете получить дополнительную безопасность в тех случаях, когда ссылка всегда должна указывать на что-то действительное. Например, вы не можете присвоить значение null ссылке. Таким образом, с точки зрения C++ многие часто поощряют использование ссылок, когда это возможно, потому что тот факт, что он имеет больше ограничений и сужает варианты, может означать меньшее количество способов злоупотребления им.

С точки зрения производительности, в очень теоретическом плане оптимизирующий компилятор может использовать тот факт, что ссылка не может изменять адреса, назначенные ей в свою пользу. На практике большинство оптимизирующих компиляторов не настолько глупы, чтобы требовать эту помощь от программиста, и многие из них засвидетельствовали, что оптимизирующие компиляторы испускают одну и ту же сборку независимо от того, используете ли вы ссылки или указатели.

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

Смежные вопросы