sizeof(int) == 3
2023-01-27 18:56Встречался ли вам процессор, где sizeof(int) равен трём? Не древность какая, а вполне современный чип. На Маузере $12 баксов стоит. Это тот самый eZ80, что в компьютере Agon Light, что я упоминал. Он хоть и уродился от 16-битного z80, но размер всех регистров увеличили до 24 бит. Получился странный размер целого числа.
Zilog поставляет бесплатный компилятор Си, но только для Windows. К счастью, оно успешно ставится и работает на Линуксе посредством Wine. Скачивается по ссылке: ZDS II eZ80Acclaim. После установки пакет оказывается в каталоге ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim!_5.3.4.
Чтобы выяснить размер int, скомпилируем тривиальную програмку и глянем ассемблерный результат:
Глянем для интереса значения INT_MAX и INT_MIN:
Zilog поставляет бесплатный компилятор Си, но только для Windows. К счастью, оно успешно ставится и работает на Линуксе посредством Wine. Скачивается по ссылке: ZDS II eZ80Acclaim. После установки пакет оказывается в каталоге ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim!_5.3.4.
Чтобы выяснить размер int, скомпилируем тривиальную програмку и глянем ассемблерный результат:
Видите команду LD HL,3? Это возвращаемое значение sizeof(int) = 3.$ cat szint.c
int szint()
{
return sizeof(int);
}
$ export WINEDEBUG=-winediag,-systray
$ wine ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim\!_5.3.4/bin/ez80cc.exe -cpu:EZ80F92 -noasm szint.c
$ cat szint.src
; Zilog eZ80 ANSI C Compiler Release 3.4
; -nomodsect -peephole -globalopt -localcse -optsize
; -const=ROM
FILE ".\szint.c"
.assume ADL=1
SEGMENT CODE
; 1 int szint()
; 2 {
_szint:
; 3 return sizeof(int);
LD HL,3
; 4 }
RET
;**************************** _szint ***************************
;Name Addr/Register Size Type
; Stack Frame Size: 6 (bytes)
; Spill Code: 0 (instruction)
XDEF _szint
END
Глянем для интереса значения INT_MAX и INT_MIN:
Такой вот странный процессор.$ grep -rh define\ INT_M ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim\!_5.3.4/include
#define INT_MAX 8388607 /* max value for int */
#define INT_MIN (-8388607 - 1) /* min value for int */

no subject
Date: 2023-01-28 03:31 (UTC)no subject
Date: 2023-01-28 03:55 (UTC)no subject
Date: 2023-01-28 08:20 (UTC)no subject
Date: 2023-01-28 03:33 (UTC)А на MSP430X 20-битные регистры, sizeof(int)=2.5.
no subject
Date: 2023-01-28 03:42 (UTC)no subject
Date: 2023-01-28 03:53 (UTC)MSP430X 20-bit extension
In order to support this, an extended form of the MSP430 uses 20-bit registers and a 20-bit address space
no subject
Date: 2023-01-28 03:55 (UTC)no subject
Date: 2023-01-28 05:12 (UTC)Есть какие-то трудности, чтобы INT_MAX был 0x7FFFF?
no subject
Date: 2023-01-28 07:17 (UTC)И как-то не встречались мне архитектуры, где размер целого в Си был бы не кратным байту. Думаю, это противоречит стандарту языка.
no subject
Date: 2023-01-28 04:07 (UTC)no subject
Date: 2023-01-28 05:03 (UTC)no subject
Date: 2023-01-28 05:09 (UTC)no subject
Date: 2023-01-28 05:14 (UTC)Недоработка же. Надо было размер возвращать в битах.
no subject
Date: 2023-01-28 04:06 (UTC)no subject
Date: 2023-01-28 04:29 (UTC)no subject
Date: 2023-01-28 04:37 (UTC)Не слишком сложно, но зачотно.
no subject
Date: 2023-01-28 08:23 (UTC)no subject
Date: 2023-01-28 10:14 (UTC)no subject
Date: 2023-01-28 07:54 (UTC)Если мы заговорили об экзотике, то https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D1%85_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2
"Практическое применение: чехословацкая ламповая ЭВМ «EPOS», советская военная многопроцессорная суперЭВМ 5Э53, предназначенная для решения задач противоракетной обороны."
no subject
Date: 2023-01-28 10:47 (UTC)no subject
Date: 2023-01-28 12:33 (UTC)Ну хотя бы целое число. А то на иных архитектурках оно было не целое.
no subject
Date: 2023-01-28 15:46 (UTC)no subject
Date: 2023-01-28 17:46 (UTC)Нет, там экстра биты не играли никакой роли.
no subject
Date: 2023-01-28 21:40 (UTC)