## Arrays

### Array limits

&ECL; arrays can have up to 64 dimensions. Common-Lisp constants related to arrays have the following values in &ECL;.

Constant | Value
--- | ---
array-rank-limit | 64
array-dimension-limit | most-positive-fixnum
array-total-size-limit | array-dimension-limit

### 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 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 ).