Multimedia computing systems are typically heterogeneous multiprocessors which are highly optimized for both performance and implementation cost. This makes them well-suited to hardware/software co-design techniques, which simultaneously optimize the hardware and software architectures of a system to meet system requirements. This paper surveys important results in co-design with emphasis on techniques necessary for the design of multimedia computing systems, particularly the analysis and synthesis of memory systems.