Вопрос по c++, performance – Причины не передавать простые типы по ссылке?

6

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

Но я не могу узнатьreason почему это плохо влияет на производительность, это потому, что для c ++ быстрее просто создать новый простой тип, чем для переменной или что это такое?

Я ожидал бы, что это будет оптимизация компилятора, если передать по постоянной ссылке (компилятор преобразует это в передачу по значению). Thomas Matthews
Даже без какой-либо "производительности" соображения, ссылочные параметры меняют семантику вызова ... user166390

Ваш Ответ

4   ответа
0

Например, в 32-битном режимеint размер 4 байта иint * размер указателя составляет 4 байта. Передача 4 байтаint напрямую быстрее, чем прохождение 4-х байтового указателя и затем загрузкаint по этому указателю.

Error: User Rate Limit Exceeded
0

которые необходимо разыменовывать при каждом обращении к ним. Это, очевидно, требует дополнительных операций.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

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

Эта превосходная статья Дэйва Абрамса отвечает на все ваши вопросы, а затем некоторые:Хотите скорость? Передать по значению.

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

Error: User Rate Limit Exceededweb.archive.org/web/20140205194657/http://cpp-next.com/archive/…
Error: User Rate Limit Exceededjuanchopanzacpp.wordpress.com/2014/05/11/…
6

pointer to memory location -> memory location

Если вы используете значение, оно:

memory location

Поскольку значение должно быть скопировано в любом случае (ссылка или значение), передача по ссылке не повышает производительность; один дополнительный поиск должен быть сделан. Так что теоретически «ухудшается» производительность, но не на любую сумму, которую вы когда-либо заметите.

Error: User Rate Limit Exceeded"Since a value has to be copied either way"Error: User Rate Limit ExceededdoubleError: User Rate Limit ExceededdoubleError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы