vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2009-03-12 04:26 pm

Необычный процессор

Загадка: на каком из процессоров sizeof(int) == sizeof(char)?
Вполне современная архитектура, массово выпускается одной из известных западных фирм.

[identity profile] pnv82.livejournal.com 2009-03-12 03:45 pm (UTC)(link)
Если я правильно понял это еще и от компилятора может зависеть?
http://alenacpp.blogspot.com/2009/03/sizeofa.html

[identity profile] spamsink.livejournal.com 2009-03-12 03:57 pm (UTC)(link)
И BITSPERBYTE, поди, 32?

[identity profile] spamsink.livejournal.com 2009-03-12 04:28 pm (UTC)(link)
Неужели 48?

Re: :)

[identity profile] spamsink.livejournal.com 2009-03-12 04:53 pm (UTC)(link)
16 - это правильно. На процессорах с 16 бит/байт юникод поддержать - как два байта переслать. Базовая страница - 1 байт, все остальное - 2 байта. Красота!

[identity profile] dvv.livejournal.com 2009-03-12 06:35 pm (UTC)(link)
Восьмибитный int не бывает, C требует, чтобы диапазон значений был не хуже, чем:

— minimum value for an object of type -(215 - 1)
— maximum value for an object of type 215 - 1
— maximum value for an object of type 216 - 1

Re: :)

[identity profile] dvv.livejournal.com 2009-03-12 06:43 pm (UTC)(link)
Полный Unicode — 32 бита. К примеру, в нормальных браузерах после двоеточия должен быть глиф из репертуара, который в 16 бит в натуральном виде не лезет: 𝄢

Re: :)

[identity profile] spamsink.livejournal.com 2009-03-12 06:55 pm (UTC)(link)
Ну да, ну и что (http://www.unicode.org/glossary/#surrogate_code_point)?

Re: :)

[identity profile] spamsink.livejournal.com 2009-03-12 06:57 pm (UTC)(link)
Кстати, http://www.fileformat.info/info/unicode/char/1d122/index.htm

Зачем мне MUSICAL SYMBOL F CLEF?

Re: :)

[identity profile] dvv.livejournal.com 2009-03-12 07:03 pm (UTC)(link)
С таким подходом и UTF-8 хватает. Восьмибитного.

Re: :)

[identity profile] dvv.livejournal.com 2009-03-12 07:04 pm (UTC)(link)
С таким подходом и KOI8-R хватает. Восьмибитного.

Re: :)

[identity profile] spamsink.livejournal.com 2009-03-12 07:30 pm (UTC)(link)
До двух считать проще, чем до 4. А верхние страницы я бы вообще отменил, чтобы всякое говно (http://www.unicode.org/%7Escherer/emoji4unicode/snapshot/utc.html#e-4F4) в стандарт не попадало.

Re: внатуре ?

[identity profile] dvv.livejournal.com 2009-03-12 08:10 pm (UTC)(link)
Тут моих формул нету, тут есть формулы из стандарта языка, раздел 5.2.4.2.1. А про int8_t ни я, ни хозяин журнала слова, вроде как, не сказали.

Re: Так может, это фишка?

[identity profile] dvv.livejournal.com 2009-03-12 08:21 pm (UTC)(link)
В смысле? Насколько я помню (ох, давно это было), в gcc нету „пооктетной” адресации. Есть char, и есть универсальный пойнтер гранулярности char.

Re: :)

[identity profile] dvv.livejournal.com 2009-03-12 08:27 pm (UTC)(link)
До одного считать ещё проще. Особенно если в этот один байт уписывать только чистый ASCII, без всякого говна. По–хорошему вообще нужно телеграфным кодом ограничиться. Типа разрядов на 6 максимум.

что-то из DSP.

[identity profile] zhengxi.livejournal.com 2009-03-12 08:42 pm (UTC)(link)
Analog Devices ?

[identity profile] flhack.livejournal.com 2009-03-13 12:08 am (UTC)(link)
tms320c54 за современный сойдет?

[identity profile] dz.livejournal.com 2009-03-13 12:17 am (UTC)(link)
купил ты меня. хоть я и знаю, что бывают архитектуры с длинным char, не сообразил. :)

PS: даёшь 32-битные символы. хватит экономить.

[identity profile] dvv.livejournal.com 2009-03-13 01:52 pm (UTC)(link)
Таки заставил меня залезть в тексты :-) Ну так там ничего не мешает сделать BITS_PER_UNIT 16 (или 32). Будет такой вот толстый байт.

Re: Хреново

[identity profile] dvv.livejournal.com 2009-03-13 01:57 pm (UTC)(link)
А разве POSIX где–то оперирует термином „октет”?

[identity profile] dvv.livejournal.com 2009-03-13 02:14 pm (UTC)(link)
Ну а какие проблемы? Один октет прекрасно влезает в один широкий байт. Какие проблемы с нечётным количеством широких байтов?

[identity profile] dvv.livejournal.com 2009-03-13 02:20 pm (UTC)(link)
Дык какие проблемы:
> cat 00.c
#include <wchar.h>
#include <stdio.h>

int
main()
{
        printf("%d\n", (int)sizeof(wchar_t));
}
> gcc 00.c
> ./a.out
4
> 

Только так и работаем :-)

[identity profile] dvv.livejournal.com 2009-03-13 02:26 pm (UTC)(link)
Естественно. В GCC ничего не делается „простой заменой одного макроса” :-)

[identity profile] dvv.livejournal.com 2009-03-13 02:32 pm (UTC)(link)
Так мы о read() или о COM—портах? Если первое, то естественно, read() должен читать полные (широкие!) байты, а если второе, это дело драйвера утрясать представление данных между устройством и всей остальной системой.

Re: Хреново

[identity profile] spamsink.livejournal.com 2009-03-13 03:24 pm (UTC)(link)
Не вижу проблемы. read/write могут читать-писать по одному октету на байт (write - возвращать ошибку, если в записываемом байте попался не октет), а для упакованного чтения-записи могут быть отдельные системные вызовы.

[identity profile] spamsink.livejournal.com 2009-03-13 04:23 pm (UTC)(link)
Ну хорошо, не отдельные, а переключать режимы с помощью ioctl. По умолчанию работают только четные количества октетов (вот такой block device с блоком в 2 байта), а если очень хочется, то можно переключить в распакованный режим.

[identity profile] dvv.livejournal.com 2009-03-13 04:32 pm (UTC)(link)
Нету в POSIXе двух режимов :-)

[identity profile] dvv.livejournal.com 2009-03-13 04:40 pm (UTC)(link)
Это ещё зачем? Ты ж не заводишь отдельные системные вызовы для, скажем, устройства, у которого регистры выдают по 2 бита?