Difference in size of input and output to avrdude
As the name implies, a hex file contains its data encoded in hexadecimal. Specifically, in intel hex format. If you open the file in a text editor, you'll see it's a series of lines, each starting with a colon, some header data, and a fixed number of hex digits.

Hexadecimal requires two characters to store one byte, so that doubles your filesize right away. Add to that the overhead for the format (specifying addresses to write to, lengths, checksums etc) and you arrive at the final file size.

If AVRDude is reporting 298 bytes written, that is indeed the compiled size of your program.