Well, you can investigate resulting binary and assembler. Try to count numbers in first 4 files (you don't store the 5th into the the variable in your example) (their textual contents is not stored, just the numbers) and multiply it by the size of processor instruction, needed to store it. For me (x86, 32bit exe) each such instruction takes 7 bytes in the binary, and for my test with 2K numbers in each file the difference in binary size is 57017 bytes, which is very close to expected 2K*4*7=57344, the small difference is probably because of padding. So, the size just matches for me.
To get the size of the instruction you can fill your test files with one and the same number and just look at the resulting binary in a hex editor: you'll see a small repeating fragment through large part of the file, you'll recognize it instantly. But that it copies each number may probably be bad for very big data sets. For my example though it's not noticeable. B.t.w. your example doesn't compile as is (even when data files are created), so may be your actual code differs from it. Say there's undeclared variable `length`, I assumed its `temp.len`.
