В чем заключаются недостатки повсеместного использования [[no_unique_address]]?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 В чем заключаются недостатки повсеместного использования [[no_unique_address]]?

Сообщение Anonymous »

Код: Выделить всё

[[no_unique_address]]
позволяет более эффективно размещать структуры, иногда помещая элементы в заполнение хвоста предыдущих членов. Нам всем нравится экономить оперативную память и иметь более эффективные кеш-структуры. Так почему бы не использовать его везде и всегда?
Ссылаясь на стандарт C++ и/или ABI Itanium C++, какие существуют причины избегать использования [[no_unique_address]] на большинстве или на всех участниках?
Например:
  • Есть ли при этом проблемы с безопасностью, например, опасения по поводу перезаписи объекта в хвостовом отступе при использовании оператор=? Этот ответ подразумевает, что, возможно, да, но неясно, является ли это ошибкой в ​​реализации std::copy, а также я не могу воспроизвести ее с помощью современного clang.
    Я не нашел в стандарте ничего, что говорило бы, что оператор = может вызвать здесь проблему. Кроме того, похоже, что любая проблема с [[no_unique_address]] также применима к базовым классам, в которые помещаются члены подкласса с заполнением хвоста.
  • Существуют ли проблемы с эффективностью, например, требуется ли больше кода для загрузки или сохранения значений? Учитывая, что выравнивание по-прежнему правильное, я не понимаю, почему это так.
Я пришел к этому вопросу, размышляя, почему std::variant в libc++ не использует [[no_unique_address]] для своего состояния, то есть я не могу использовать его в структуре, которая требует быть эффективно вложен в другой и может добиться большего успеха с объединение и тег с открытым кодом. Мне неясно, можно ли безопасно использовать [[no_unique_address]] в std::variant, если нас не волнует изменение ABI. Но меня интересует более широкий вопрос: каковы недостатки в целом.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -the-place
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»