It entirely depends on how the text is being rendered/stored. A normal text can be loaded as one block into memory and then you just count(store) all linebreaks as longwords, in my example 66*4kbytes + size of text 2mbytes.
Once you find special codes, the datatype might add more overhead to it, like begin/end/length of esc sequence, or even split the entire text up into pieces of strings with their own properties and what not.
I don't know how the ansi works in text.datatype but i kindof understand why it uses 3x the amount of RAM.