ニュース

「Visual Studio 2022」にC++言語のクラスや構造体のメモリレイアウトを視覚化する機能

v17.9 Preview 1でテスト中

C++開発者がクラス、構造体、共用体(ユニオン)、基底型、列挙型のサイズとアライメントを簡単に表示できる機能

 「Visual Studio 2022」v17.8ではC++開発者がクラス、構造体、共用体(ユニオン)、基底型、列挙型のサイズとアライメントを簡単に表示できる機能が導入された。これをさらに発展させ、「Visual Studio 2022」v17.9 Preview 1ではC++クラス、構造体、共用体のメモリレイアウトを視覚化する機能が提供され、さらにわかりやすくなっているとのこと。米Microsoftは12月19日(現地時間)、公式ブログ「Visual Studio Blog」で紹介している。

 C++言語において、構造体などのデータサイズは単純にメンバーの合計サイズにならないことが少なくない。ハードウェアの制限やメモリアクセスの最適化のため、データをそのまま並べて配置するのではなく、パディング(余白)を追加してデータをメモリ上にキリよく配置(アラインメント)していることがあるためだ。仮想関数(vtable、vptr)などの要素が加わると、データサイズをあらかじめ知るのはより難しくなる。

 そのため、プログラマーのなかにはデータ構造のメモリサイズやレイアウトを知るために追加のコードを加えたり、コンパイラースイッチなどを利用して、それを計算する者もいる。v17.8ではこうした手間を省くため、識別子にカーソルを合わせるとクイック情報ツールチップが表示され、そこでサイズとアラインメントを確認できるようになっていた。

 v17.9 Preview 1ではこのクイック情報ツールチップにメモリレイアウトビューへのリンクが追加されており、クラスや構造体、共用体のメモリ配置をグラフィカルに表したグラフへ簡単にアクセス可能。それぞれのデータメンバーにカーソルを合わせれば、そのオフセットやサイズも表示される。

クラスや構造体、共用体のメモリ配置をグラフィカルに表したメモリレイアウトビュー

 同社によると、この機能はCOMタイプの「v-table」のメモリレイアウトを視覚化し、COMオブジェクトの構造がどうなっているかを知るのに役立つとのこと。また、コードの効率と理解度を向上させ、メモリ管理とデータ構造の取り扱いを容易にするという点で、C++開発者に大きなメリットをもたらすとしている。ただし、現在のところC++/CLIの 「property」キーワードを完全にサポートしておらず、プロパティが正しくレンダリングされないことがある点には注意したい。