Чтобы ограничить pointer aliasing, я использовал до сих пор классификатор типа __restrict__
, как описано here, в разделе о расширениях C++, предоставляемых компилятором GNU GCC. Например, следующая функция:Ограниченное сглаживание с использованием класса `ограничения` и` unique_ptr` в C++
void fn (int *__restrict__ rptr, int &__restrict__ rref)
{
/* ... */
}
принимает в качестве аргументов ограниченный указатель и ограниченную ссылку.
С введением unique_ptr
в стандарт C++ мне интересно, предоставит ли компилятор GCC тот же оптимизированный (или лучший) машинный код, используя unique_ptr
.
Следует ли использовать такие расширения, как __restrict__
? Есть ли лучший способ в более поздних стандартах C++ производить ту же оптимизацию (для указателей и ссылок)?
Но, например, Марк Нельсон говорит в [Dr. Dobb's] (http://www.drdobbs.com/cpp/c11-uniqueptr/240002708): «Так в чем же смысл слова уникально в [контексте' unique_ptr']? ... Когда вы создаете объект unique_ptr, вы заявляете, что у вас будет __ точно одна копия этого указателя__. «Так что это очень близко к тому, что делает« __restrict__ », насколько я понимаю. – AlQuemist
Статья неправильная. Вы заявляете, что у вас будет ровно одна копия *, ответственная за право собственности *. Нет ничего плохого в передаче необработанного указателя на принадлежащий ему объект при условии, что функция не пытается и не сохраняет указатель в любом месте, –