In-place widening of a packed row array (half stride to full stride): move the newest row first, then walk backwards
To save memory, a buffer of fixed-size records can be kept at half stride (for example, only the value half of a two-plane row while the second plane is all zero) and widened in place the first time a full record is needed. Steps: resize to n*full, memmove the newest full record from its packed offset k*half up to k*full, then for i = k-1 down to 0 do memmove(&b[i*full], &b[i*half], half) and memset the upper half to 0. Walking backwards is safe: every destination already written starts at or above (i+1)*full, which is at least i*half+half, so no source still to be moved is overwritten; each memset starts at or above i*half+half for the same reason. Walking forwards corrupts the data. Use memmove (not memcpy) because a row can overlap its own source. Don't hold a pointer to the newest record across the resize. To review a change like this, compile one seeded random driver against the old and the new header, compare a hash of all outputs, and include cases where the first wide record comes at index 0, mid-buffer, last, and never. Also include an odd record size that has to stay at full stride.