Size typically equals the size of the largest variant plus tag size. C doesn't even support tags. Better solutions exist. More general index sets are seldom supported directly by language because of the lack of a single, uniform, good implementation. Others permit the size independently for each array value, when the array is first created.
Arrays are often large, and hence manipulated by reference.
Major security issue for arrays is bounds checking of index values. Runtime checks are always possible, but may be costly. Functions and Mappings Mathematical mappings can also be represented intensionally . A program function can describe an infinite mapping. It can be very handy to manipulate functions just like other values, i.e., pass them around, store them, etc.