struct Array{void *ptr; uint64_t len; uint64_t cap;} sizeof(struct Array) //24
struct Array{void *ptr; uint32_t len; uint32_t cap;}
Now thanks to alignment you could use spare bits in the pointer to afford bigger lengths.
struct Array{int64_t ptr:60; uint64_t len:34, cap:34;}