Drupal's design (as of Drupal 5.5) is that every enabled module is loaded into memory on every page view. This is a convenient and fundamental feature of Drupal's design philosophy—it allows modules to merge their functions into a rich and useful API for the site. However, it also can make a Drupal site use a lot of memory, and the time it takes to load in all of the modules on every page view can come to dominate the amount of time it takes generating each page, causing Drupal to use up a lot of CPU on the web server.
Drupal 5 has an advantage over Drupal 4.7 in that installation related code is now in a separate .install file which doesn't normally get loaded into memory. However, it can still be advantageous to write your modules in several separate files, with the .module file acting as a function call router of sorts -- loading in the necessary sub-files only when necessary. A function which previously looked like this:
function do_something($arg)can be replaced with one that does this instead:
// Lots and lots of code here
Unfortunately, this kind of pattern is at the moment used only infrequently, so on a Drupal site which has many modules enabled, memory and page generation speed can be dominated by loading in a lot of code which will never get used.
Some of the modules that I've created are simply applications of this low-memory pattern to existing drupal modules. If you have a Drupal site which suffers from high memory or CPU usage problems, you may be interested in perusing through them.