Любой инструмент, чтобы определить наиболее эффективный способ передачи данных, по ссылке или по значению? - PullRequest
1 голос
/ 17 октября 2010

Для объектов или примитивных данных с размером, равным или меньшим, чем размер указателя, наиболее эффективный метод передачи в функцию определенно был бы по значению, но я хотел бы знать, что есть какой-либо инструмент, способный определить наилучшееметод передачи объектов классов или примитивных данных с размерами, превышающими размер указателя на функции на платформе, как что-то из инструментов повышения?

Ответы [ 3 ]

6 голосов
/ 17 октября 2010

Да, у Boost есть это, называемое call traits .Но его высокая стоимость в нечитаемости выше, чем микроскопический выигрыш в эффективности.По моему скромному мнению.

Приветствия & hth.,

5 голосов
/ 17 октября 2010

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

Короче говоря, передавайте что-либо большее, чем размер указателя, по ссылке / указателю, и заботитесь о производительности только тогда, когда вы знаете, что вам нужно позаботиться.Преждевременная оптимизация - корень всего зла.

4 голосов
/ 17 октября 2010

Да, этот инструмент является компилятором. Передача по ссылке, и, если оптимизатор заметит, что ему удастся сохранить копию объекта вместо адреса для объектов, размер которых меньше или равен размеру адреса, то он может сделать это. Это, вероятно, лучший подход для шаблонного кода, когда вы не можете быть уверены, являются ли ваши параметры большими или маленькими объектами - просто используйте ссылки в любом случае.

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

...