Logically it allocates space for all members in the array. The size space allocated in an array is based on the highest index used and is rounded up to the next power of 2. However keep in mind that each array is a 32 bit array and so no matter the type, an array of a certain size will always use the same storage space. With strings, they are stored as a separate custom array and the variable purly holds a reference to the string array. Thus all string variables are 32 bit, but there is also the size of the string which is being stored on top of that.
However for efficency, 2 strings with the same content will reference the same content, thus you can not get duplicate string content so 2 variables storing the same string will only use 32 bits more than 1 variable referencing the same string. A maximum size array in wc3 (an index used in the range of 4096 to 8191) is only 32 KB, and concidering modern PCs atleast have 1 GB it is hardly noticable. Infact, using a different model or a model once will use more space than a full array. But be aware that this is the space just for the array and not the objects which may be represented by the values in the array (handles and strings).