When I was young (12-16), we wrote 4KB programs. Then it started increasing, 60KB, 200KB, with Windows 95, 1MB, by the year 2000, 6MB, and we're well into 60MB per executable territory. The bloat is incredible.
Part of the problem is how large teams work. You have to break the problem down into smaller pieces, so small that you can hire 40+ developers, and that means everyone writes their own sort function, everyone writes their boilerplate code to interface with other modules, layers upon layers upon layers of interoperability. Of course this affects battery life, too, when the individual modules are doing little more than communicating with other modules.
This is especially true for C++, which doesn't support shared libraries, so you have to "glue" the same code into each module over and over and over. Probably 50+ megabytes of core libraries duplicated in every file. There's a way to share, but it's more difficult, it's easier to duplicate. You'll end up with 80% of your executable being either a duplicate, or boilerplate.
We just haven't figured out how to break down big problems to team members without introducing bloat. It's a race to the release type of world, when everything had to be finished yesterday, and the last thing managers care about is how many gigabytes the downloadable installer is.