メモリモデル (プログラミング)
特に、同期バリアが含まれないコードブロック内では、コンパイラは文の順序の交換をしても安全であるという前提を置くことができるようになっている。
メモリモデルの分野における研究の大部分は、以下のいずれかに関係している。
競合フリーかつ(より重要かもしれないが)競合状態を含むプログラムに対して十分な保証を与えつつ、コンパイラ最適化に最大限の自由を許すメモリモデルの設計。
プログラムの最適化がメモリモデルの観点から正当であることの証明。
当初、Javaのメモリモデル(英語版)は、よく使われるプログラミング言語のために、包括的なスレッディングメモリモデルを提供しようとしていた。しかし、後に、実装にある種の制約を課さない限り、スレッドをライブラリとして実装することができないこと、そして特に、CおよびC++の標準(C99およびC++03(英語版))では必要な制約が欠けていることが明らかになると、C++のスレッディング小委員会は、適したメモリモデルを見つけるための作業を開始した。2005年、委員会はCのワーキングドキュメントn1131を提出し、Cの委員会に協力を提案した。提案された最終バージョンのメモリモデルC++ n2429は、2007年10月のKonaにおける会議でC++の標準のドラフトに採択された。このメモリモデルは、次のC++およびCの標準であるC++11およびC11に含まれることになっている。