In designing a parallel machine to support virtual shared memory, an important consideration is whether the main memory should be conventional or (set-) associative. This is the main distinction between so-called CC-NUMA and COMA architectures. A related issue is what additional caches are needed in the memory hierarchy. In this article we investigate the consequences on price and performance of different choices of component in the memory hierarchy, assuming set-associative caches and a main memory which is either conventional or set-associative. We use analytic models driven by accurate miss ratios determined from actual parallel executions of a range of realistic benchmarks. We make cost assumptions based on published figures for different types of storage component. Our results show that, for many programs, CC-NUMA machines need a large coherent cache, often equalling the size of the main memory, in order to achieve good price-performance. As a consequence, optimal CC-NUMA and COMA configurations tend to need set-associative memories of similar size, and show rather little difference in price-performance. Optimal COMA configurations tend to be more general purpose, as one can find a configuration that is nearly optimal in price-performance for all applications that we used, while optimal CC-NUMA configurations tend to be more application specific.