As DSP applications continue to support an increasing number of functions and algorithms, use of multithreading operating systems is becoming more common. However indiscriminate use of multitasking can significantly increase application memory requirements. This is highly undesirable because DSP applications are usually memory constrained. This paper will illustrate how to design well-structured, multithreading DSP applications that make efficient use of memory. We will begin by examining the impact of different RTOS threading and interrupt handling mechanisms on memory requirements. We will then discuss approaches for memory management that reduce the need for large program or task stacks and the impact this has on designing a multithreaded application. We will demonstrate these design techniques through an application example of a multifunction, multichannel system.