Re[8]: Откуда эта лютая любовь к знаковым целым?
От: vopl Россия  
Дата: 07.05.20 15:26
Оценка:
Здравствуйте, netch80, Вы писали:

N>Здравствуйте, vopl, Вы писали:


V>>>Причем тут size_t и почему ты считаешь, что он "более уместен"? Результат вычитания двух указателей имеет тип ptrdiff_t. Можно легко представить платформу, где первый гораздо меньше второго.

V>>size_t меньше ptrdiff_t? Вряд ли. Стандарт требует чтобы этот тип вмещал размер любого объекта, включая тот самый массив, разницу индексов которого вмещает ptrdiff_t. Таким образом, он гарантированно не меньше ptrdiff_t.

N>Пусть у нас 16-битная платформа (чтобы числа не были страшными) и адреса от 0 до 65535.

N>Для size_t достаточно 16 бит. Для ptrdiff_t, чтобы поддержать все значения от +65535 до -65535 — 17 бит.

N>Проблема общеизвестная, и её решают тем, что ни одному объекту не позволяют достигать в размере 1/2 адресного пространства (причём требование именно "меньше space/2", а не "не больше space/2"! потому что в дополнительном коде +32768 тоже не влезет). Но это значит, что для size_t достаточно на один бит меньше (15, а не 16). Ч.Т.Д.


Да, согласен . На один бит. Но не "гораздо меньше".

N>(Реально на современных платформах общего пользования это обеспечивается тем, что половина адресного пространства занята ядром, а в остальном есть ещё код, стек и т.п.

N>Но на embedded запросто получить и более хитрые конфигурации, в которых проблема может вылезти в полный рост.)

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


N>А с чего бы это быть той проверке? Есть масса других вариантов обойти.


Ну хз. Тут видно, один лишний test https://gcc.godbolt.org/z/HZBYFv
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.