連想メモリ
連想メモリ（れんそう-、Content Addressable Memory、CAM）は、コンピュータなどの記憶装置（メモリ）の一種で、たいていの一般的なメモリは整数値などでアドレスを指定してその内容を読み書きするものであるのに対し、内容（の一部）を指定して、そのアドレスあるいは内容全体を読み出すことができる、というメモリである。
概説
一般的な記憶装置（RAMやハードディスク）では、順番に振られているアドレスによってデータが収められている場所を指定すると、その場所に収められているデータが返ってくる。一方、連想メモリでは、データの一部を指定すると、そのデータを「検索」して探し出し、見つかれば、その場所のアドレス、あるいはデータ全体を返す。ソフトウェアで実装したものの場合は連想配列と呼ばれるものの機能に近いとも言える。
また特に、ハードウェアによってメモリ全体に対し並列に検索して必ず一定時間で応答するような、高性能なものを指す。当然ながら、コストはかかる。単純な記憶セルから構成されるRAMと異なり、完全並列動作する連想メモリではメモリ内の全ビット毎に入力データとの比較回路が必要である。しかも、1ビットの一致ではなくデータワード全体の一致を探さなければならないため、比較結果をまとめる回路も必要である。これらの追加回路によって連想メモリの回路サイズは増大し、製造コストも増大する。また、それら比較回路はデータが入力される度に全体が動作するため、消費電力も増大する。その結果、現状では連想メモリは非常に高速な検索がどうしても必要な用途でのみ使用されている。
速度とサイズとコストのバランスをうまく取るために、木構造検索やハッシュテーブルを使って連想メモリの機能をエミュレートするような実装をハードウェア的に行う場合もあり、その際には高速化のためにレプリケーションやパイプラインを使用する。そのような設計はルーターでよく使われている。
連想メモリおよび他のネットワーク検索のための主要インターフェイスは、ネットワーク機器の相互運用性を高める目的でNetwork Processing Forumが標準化したルックアサイドインターフェイス（LA-1 および LA-1B）で定義されている。この標準に基づいた様々な機器をIDTやサイプレス・セミコンダクタなどが製造している。
アーキテクチャの種類
二値連想メモリ（Binary CAM）は最も単純なタイプで、検索ワードの内容を 1 および 0 の二種類の値で構成されているものとして扱う。三値連想メモリ（Ternary CAM）は三番目の値として "X" あるいは "気にしない（Don't Care）"を格納されたデータワードに使用する。例えば、三値連想メモリに "10XX0" というワードが格納されていた場合、このワードは "10000"、"10010"、"10100"、"10110" のいずれとも一致する。二値連想メモリに比較して検索の柔軟性が向上するが、三種類目の値を持つという回路構成上のコスト増大要因がある。一般にこの三番目の状態はメモリ全体にマスクビットを用意することで実装される。