13.2. Specializations

When the elements of an array are declared to have some precise type, such as a small or large integer, a character or a floating point number, ECL has means to store those elements in a more compact form, known as a specialized array. The list of types for which ECL specializes arrays is platform dependent, but is summarized in the following table, together with the C type which is used internally and the expected size.

Specialized typeElement C typeSize
bit-1 bit
characterunsigned char or uint32_tDepends on character range
base-charunsigned char 
fixnumcl_fixnumMachine word (32 or 64 bits)
(signed-byte 8)int8_t8 bits
(unsigned-byte 8)uint8_t8 bits
(signed-byte 16)int16_t16 bits
(unsigned-byte 16)uint16_t16 bits
(signed-byte 32)int32_t32 bits
(unsigned-byte 32)uint32_t32 bits
(signed-byte 64)int64_t64 bits
(unsigned-byte 64)uint64_t64 bits
single-float or short-floatfloat32-bits IEEE float
double-floatdouble64-bits IEEE float
long-floatlong doubleBetween 96 and 128 bits.
tcl_objectSize of a pointer.

Let us remark that some of these specialized types might not exist in your platform. This is detected using conditional reading and features (See Number C types).