You are right: cc65 is very inefficient. However, I've been able to make it much more efficient: I implemented a lot of strategies, and they include the implementation of CBMSimpleIO and the watering down of the crt0.s files. CBMSimpleIO is a very efficient replacement of cc65's standard and console I/O libraries that interfaces directly with the kernal and performs little extra processing. In fact, most of CBMSimpleIO's binaries that quickly test its full functionality, after removing unneeded functionality from the crt0.s files, such as the call to callmain and the library init/done calls, which are not needed to test CBMSimpleIO, cost <1k. I also have these programs and others and most of my optimization techniques at https://sourceforge.net/projects/cc65extra/files/. I am able to say that the mentioned codes are efficient because of these and the size of the empty binaries are very small: the one-file Vic20 version should be no more than ~2.1k--smaller if using my Cubbyhole optimization technique which stuffs a system's Low memory when not needed during the course of your program. Are you interested now?
I've been working on compressing the tokens and gained a lot of progress but am still doing poorly. I have options to shorten all-lower-case words to 5 bits per character, shorten proper-case words the same, proper-case when a lower-case version is available and make other characters not require a EOS character, as they are only one character wide. I also find that treating certain punctuation as letters helps. I'm using a method that limits the size of a token to just enough to hold all used token values. If you want, I can capture the program's output and post some of it here, along with the text that's being compressed, so you can see if I'm doing something wrong. BTW, I have ways to better my other versions of Printtok2, including compression of the 5-bit-style's tokens and fields of the naive approach as useful when, for example, shortening groups of lower-case letters and certain punctuation or numbers or after some fields, a bit to represent whether a space follows.
Joseph Rose, a.k.a. Harry Potter
Working magic in the computer community