Вопрос: понимание и улучшение понятий выравнивания C ++
Определение выравнивания для типа в C ++ несколько низкоуровневая и относительно: оно относится к количеству байтов между последовательными адресами, по которым может быть распределен объект этого типа. байтов между последовательными адресами, по которым можно выделить заданный объект. Более того, это определение является неполным, потому что оно относительно и не имеет «адресации», чтобы сделать ее абсолютным. Кроме того, это не практично (для пользователя), потому что нет способа измерить это расстояние вне массивов, так как арифметика указателя не определена. Преобразование указателей в целые числа также невозможно, поскольку он явно определяется в стандарте (expr.reinterpret.cast): < /p>
Указатель может быть явно преобразован в любой интегральный тип, достаточно большой, чтобы удерживать все значения его типа. Функция отображения определяется внедрением. - End Note]
Практический сценарий, который создает трудности, распределяет объекты в буфере без знака (или std :: byte ). Единственный способ получить правильно выровненного адреса - через std :: align , но нет никаких гарантий, что буфер правильного размера имеет правильный размер для обеспечения такого адреса (см. Связанный вопрос).
Тем не менее, выравнивание имеет решающее значение для реализации оборудования, так как многие посты обсуждают проблемы с производительностью и не определяемые поведение (UB), которые могут привести к неправильной поведении. /> Кажется возможным изменять определение двумя способами: < /p>
Сделать преобразование значения указателя в целочисленное хорошо определенное (не зависимое от реализации), чтобы разница в значениях осталась согласованной с основным реализацией. std :: uintptr_t через reventpret_cast или static_cast ) должен быть кратным выравниванием ». MSVC; Чтобы найти хорошо выдвинутый указатель.
Подробнее здесь: https://stackoverflow.com/questions/796 ... mprovement
Практические проблемы с выравниванием C ++: возможное улучшение? ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1750065109
Anonymous
Вопрос: понимание и улучшение понятий выравнивания C ++
Определение выравнивания для типа в C ++ несколько низкоуровневая и относительно: оно относится к количеству байтов между последовательными адресами, по которым может быть распределен объект этого типа. байтов между последовательными адресами, по которым можно выделить заданный объект. Более того, это определение является неполным, потому что оно относительно и не имеет «адресации», чтобы сделать ее абсолютным. Кроме того, это не практично (для пользователя), потому что нет способа измерить это расстояние вне массивов, так как арифметика указателя не определена. Преобразование указателей в целые числа также невозможно, поскольку он явно определяется в стандарте (expr.reinterpret.cast): < /p>
Указатель может быть явно преобразован в любой интегральный тип, достаточно большой, чтобы удерживать все значения его типа. Функция отображения определяется внедрением. - End Note]
Практический сценарий, который создает трудности, распределяет объекты в буфере без знака (или std :: byte ). Единственный способ получить правильно выровненного адреса - через std :: align , но нет никаких гарантий, что буфер правильного размера имеет правильный размер для обеспечения такого адреса (см. Связанный вопрос).
Тем не менее, выравнивание имеет решающее значение для реализации оборудования, так как многие посты обсуждают проблемы с производительностью и не определяемые поведение (UB), которые могут привести к неправильной поведении. /> Кажется возможным изменять определение двумя способами: < /p>
Сделать преобразование значения указателя в целочисленное хорошо определенное (не зависимое от реализации), чтобы разница в значениях осталась согласованной с основным реализацией. std :: uintptr_t через reventpret_cast или static_cast ) должен быть кратным выравниванием ». MSVC; Чтобы найти хорошо выдвинутый указатель.
Подробнее здесь: [url]https://stackoverflow.com/questions/79667332/practical-challenges-with-c-alignment-possible-improvement[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия