C# 構造体のメモリ配置を指定する

2011/02/12

C++のリソースをDLLを経由すればC#でも使えるということなのでGUI作成で強力な力を発揮してくれるC#を始めることにしました。

データを共有するためにC++とC#で共有する構造体を作る必要がありましたが、.NET Frameworkでは性能向上のために構造体の各メンバを適当に配置してしまうようです。アライメントの知識のないプログラマが構造体を作っても、無駄なメモリを消費しないようにできているということですね。

これではCとC#で共有する構造体を使うときに困ってしまいますので、以下のように[StructLayout(LayoutKind.Sequential)]を使うことでメモリ配置をC言語のときと同様に指定できるようになるようです。

Example

[StructLayout(LayoutKind.Sequential)]
public struct Point
{
    public int x;
    public int y;

    public Point(int in_x, int in_y)
    {
        x = in_x;
        y = in_y;
    }
}

 


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

関連記事