There is a lot that goes on behind the scenes to handle files, streams, and formatted output. Yes, including <stdio.h>
and using routines from it incurs a significant amount of overhead. But the standard streams are part of an entire system of things operating together. The C library provides routines for using the streams, the operating system provides calls for accessing the file system, and command-line shells or other processes provide already-open streams when your process starts, and so on.
For normal processes, you can ignore this. For executing commands (directly typed by you or in shell scripts), it is a minor cost of all the things that happen to make commands work. Additionally, your executable may be linked to the standard library or libraries dynamically rather than statically. This means the library is not built into your executable. It is available when your program runs, but it is shared with other processes in the system, and your program’s connection to it incurs little additional overhead.
If you are working on some special process or other special software, such as a network daemon or a device driver, there are ways to avoid linking in the standard C library or parts of it. However, these are all platform specific, and you would have to provide more information (likely in other Stack Overflow questions) about exactly what you are trying to do and which platforms (hardware, operating system, developer tools) you are using.
Some of the tools for developing special software include stripped-down libraries that provide simple routines without a lot of overhead.
Additionally, C allows declaring things without defining them. The <stdio.h>
header declares various buffers and other data structures that it needs, but it is possible that, if you do not use streams or other features that needs these structures, the linker will not import from the library the modules that define them, and so they will not become a part of your executable. The details of this depend on the C implementation.