I assume you already considered and rejected having a fixed size null bitmap followed by a variable size array of datums. That seems like it would be denser and work better with cpu cache.
I guess the reason you prefer the struct is because it can be used elsewhere on its own?