|
Говорят, например, на креях все типы данных имеют один размер - 8 байт. Даже, char. Т. е. sizeof(double) == 1. Не зная об этом и не подумал бы, что такое нужно кому-нибудь. Оказывается, там нет встроенных операций доступа к отдельным байтам в памяти, соответсвенно, однобайтный доступ неэффективен, и лучше выделять на каждый символ 8 байт.
Есть ли реализации С, в которых обнуление при помощи memset не порождает нормальное число - не знаю. Стандарт требует, чтобы арифметика была двоичной, но позволяет кроме собственно двоичных разрядов иметь в представлении числа дополнительные служебные поля. Какой-нибудь дескриптор типа. Возможно, такое могло потребоваться на Эльбрусах.
Что же касается сравнения структур - то единственный законный путь - это сравнивать поэлементно. Как показывает опыт, обычно это не является достаточно большой проблемой, чтобы об этом много думать. Все остальное - это оптимизация, которая может работать, а может и не работать.
E-mail: info@telesys.ru