## 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 ansi.numbers.c-types).