I have a psychological tic which makes me reluctant to use large libraries (like GLib or Boost) in lower-level languages like C and C++. In my mind, I think:
Boost isn't a big library.
It is a collection of many small libraries. Most of them are so small they're contained in a header or two. Using boost::noncopyable
doesn't drag boost::regex
or boost::thread
into your code. They're different libraries. They're just distributed as part of the same library collection. But you only pay for the ones you use.
But speaking generally, because big libraries do exist, even if Boost isn't one of them:
Is there any basis to my thinking, or am I merely unreasonable and/or ignorant? Even if I only use one or two features of a large library, by linking to that library am I going to incur runtime performance overheads?
No basis, more or less. You can test it yourself.
Write a small C++ program and compile it. Now add a new function to it, one which is never called, but is defined. Compile the program again. Assuming optimizations are enabled, it gets stripped out by the linker because it's unused. So the cost of including additional unused code is zero.
Of course there are exceptions. If the code instantiates any global objects, those might not be removed (that's why including the iostream
header increases the executable size), but in general, you can include as many headers and link to as many libraries as you like, and it won't affect the size, performance or memory usage of your program *as long as you don't use any of the added code.
Another exception is that if you dynamically link to a .dll or .so, the entire library must be distributed, and so it can't be stripped of unused code. But libraries that are statically compiled into your executable (either as static libraries (.lib or .a) or just as included header files can usually be trimmed down by the linker, removing unused symbols.