Maybe this helps:
julia> struct A end
julia> as = [ A() for _ in 1:10 ]
10-element Vector{A}:
A()
A()
A()
A()
A()
A()
A()
A()
A()
A()
julia> sizeof(as)
0 # in bytes
julia> sizeof([ Int8(0) for _ in 1:10 ])
10 # in bytes
How would you reinterpret the 10 bytes taken up by those Int8 to the 0 bytes taken up by the As? It’s not per-se about the length of each array, but rather what has to happen to the underlying memory, as that’s what reinterpret is doing - reinterpreting how you interpret a piece of memory.
I’m deliberately showing arrays with elements in them here, as that’s something that has to be preserved when reinterpreting. The result of reinterpret is linked to the original array after all.