I am working on a C++ program and the compiled object code from a single 1200-line file (which initializes a rather complex state machine) comes out to nearly a megabyte. What could be making the file so large? Is there a way I can find what takes space inside the object file?
There can be several reasons when object files are bigger than they have to be at minimum:
At first I suggest to check if you're building with debug information, this causes the most bloat in my experience.
(I'm assuming you've got optimisations and dead code stripping turned on).
Turn on your linker's "generate map file" option and examine the output.
Common culprits are macros/templates that produce large amounts of code, and large global objects.
Possibly some template instantiations (especially the std::iostream
s), and maybe extensive inlining (i.e. classes which are fully defined in a header). However, what's the problem with a 1-megabyte object file in the first place? During linking, it might very well result in a tiny binary. I got a project here with 20 MiB of object files which gets linked into a 700 KiB binary for example.
Update: Could be also some large static array/object. Besides that, with MSVC++ and GCC, you can look at the generated assembly for a file, which can give you some hints (with GCC, it's g++ -S foo.cpp
, for MSVC++, it's '/FAs'). Either you will see a lot of template instances, then these are the reason. If not, it's the object size of static
objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With