> 2x memory looks like a naive implementation of just allocating an std::string from heap for each line. Due to heap fragmentation and various overhead it would quickly blow up.
Looks more line Qt's internal UTF-16 encoding in this case.
In the Challenger case, the bad information has been deliberately hidden within the structure. They could just as well have pulled it up in the structure.
It's like saying variable font sizes are inherently bad because due to them, contracts can have small print sections.