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 type | Element C type | Size |
---|---|---|
bit | - | 1 bit |
character | unsigned char or uint32_t | Depends on character range |
base-char | unsigned char | |
fixnum | cl_fixnum | Machine word (32 or 64 bits) |
(signed-byte 8) | int8_t | 8 bits |
(unsigned-byte 8) | uint8_t | 8 bits |
(signed-byte 16) | int16_t | 16 bits |
(unsigned-byte 16) | uint16_t | 16 bits |
(signed-byte 32) | int32_t | 32 bits |
(unsigned-byte 32) | uint32_t | 32 bits |
(signed-byte 64) | int64_t | 64 bits |
(unsigned-byte 64) | uint64_t | 64 bits |
single-float or short-float | float | 32-bits IEEE float |
double-float | double | 64-bits IEEE float |
long-float | long double | Between 96 and 128 bits. |
t | cl_object | Size 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).