Symbols are a key part of GDB's operation. Symbols include variables, functions, and types.
Symbol information for a large program can be truly massive, and reading of symbol information is one of the major performance bottlenecks in GDB; it can take many minutes to process it all. Studies have shown that nearly all the time spent is computational, rather than file reading.
One of the ways for GDB to provide a good user experience is to start up quickly, taking no more than a few seconds. It is simply not possible to process all of a program's debugging info in that time, and so we attempt to handle symbols incrementally. For instance, we create partial symbol tables consisting of only selected symbols, and only expand them to full symbol tables when necessary.