Skip to content

Address sanitizerとEigenを一緒に使うとき

EIGEN_MAX_ALIGN_BYTESマクロを0と定義すること。

理由

Eigenでは、EIGEN_MAX_ALIGN_BYTESマクロとEIGEN_MAX_STATIC_ALIGN_BYTESマクロによって、それぞれ動的または静的に確保されたデータのメモリアラインメントの最大値を指定することができる。 EIGEN_MAX_STATIC_ALIGN_BYTES <= EIGEN_MAX_ALIGN_BYTESでなければならず、成り立たない場合は自動的にEIGEN_MAX_STATIC_ALIGN_BYTES = EIGEN_MAX_ALIGN_BYTESとされる。 もし、どちらも指定されなければアーキテクチャやコンパイラ、OSによって自動的に計算される。

Eigenはバイナリ互換性のためにベクトル化が無効化されていても強制的にメモリアラインメントを指定するため、Address sanitizerと一緒に使う時は0を指定してアラインメントを無効にする必要がある。

参考