Unityでメモリ位置を表示するツール

はじめましてエンジニアの東野です。
技術的な内容をお伝えするブログを始めます。
エンジニアチームのメンバーで不定期更新にはなりますが、ご一読いただければ幸いです。
今回は個人的に必要と感じたツールの紹介をしたいと思います。

データ局所化を意識するとデータのメモリ配置が気になってきます。
classとstructでどう配置が変わるのかイメージしにくい所もあるかと思います。
そこでUnityでメモリ位置を表示するツールを作成しました。
Gitリポジトリ

データ局所化とは
プログラムが頻繁にアクセスするデータを連続するメモリに配置して、
CPUのキャッシュメモリの利用効率を高め、全体のパフォーマンスを向上させるテクニックです。

この様なコードがあった場合に、

	public class TestClassA
	{
		public uint m_valueA = 0xDEADBEEF;
		public TestClassB m_classB = new TestClassB();
		public TestClassC m_classC = new TestClassC();
	}

	public class TestClassB
	{
		public uint m_valueB = 0xDEADBEEF;
	}

	public class TestClassC
	{
		public uint m_valueC = 0xDEADBEEF;
	}

	public struct TestStructA
	{
		public uint m_valueA;
		public TestStructB m_structB;
		public TestStructC m_structC;
	}

	public struct TestStructB
	{
		public uint m_valueB;
	}

	public struct TestStructC
	{
		public uint m_valueC;
	}

	TestClassA m_classInstance = new TestClassA();
	TestStructA m_structInstance = new TestStructA()
	{
		m_valueA = 0xDEADBEEF,
		m_structB = new TestStructB { m_valueB = 0xDEADBEEF },
		m_structC = new TestStructC() { m_valueC = 0xDEADBEEF },
	};

classでは参照毎に離れたメモリに配置されているのに対し、
structでは連続したメモリに配置されているのが分かります。

注意点として、unsafeを多用しているため想定外のケースではエディタごと終了してしまいます。

クラス設計の際に参考にしてもらえたらと思います。

 

サービスサイト