このブログ「吟遊詩人の戯言」 の記事検索...

C#向けのメモリ管理クラス

関連記事

をちょろっと作ってみた@アンマネージメモリ
でも、そんな仰々しいものじゃなく、単純に、Marshalのメソッドを呼び出してみただけ(笑)


Marshal.AllocHGlobal()で確保したメモリと
Marshal.AllocCoTaskMem()で確保したメモリ

どっちがアクセスが速いかは、気が向いたら、計測しておきますわぁ~
でもなんとなく、Marshal.AllocHGlobal()のほうが速い気がするけど…

【追記:2012/11/22】

Marshal.AllocCoTaskMemが速いそうな!(なんとっ! 😯

こちらのページに記載がありましたっす

.NET Framework クラス ライブラリの下の2つのアンマネージメモリ確保APIの違いを教えて下さい。@はてな

ってことで,書き換えておこう...(汗

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace bMountLib.Objects
{
    //アンマネージメモリ管理クラス
    public class CommonMethedMemory
    {
        #region APIs
        [DllImport("Kernel32.dll", EntryPoint="RtlMoveMemory")]
        private static extern void CopyMemory(IntPtr Destination, IntPtr Source, [MarshalAs(UnmanagedType.U4)] int Length);
        #endregion

        //-------------------------------------------
        //alooc
        //
        //-------------------------------------------
        static public IntPtr MemAlloc(int size)
        {
            #region
            return Marshal.AllocCoTaskMem(size);
            #endregion
        }

        //-------------------------------------------
        //free
        //
        //-------------------------------------------
        static public void   MemFree(IntPtr pt)
        {
            #region
            Marshal.FreeCoTaskMem(pt);
            #endregion
        }

        //-------------------------------------------
        //コピー
        //
        //-------------------------------------------
        static public void   MemCopy(IntPtr d, IntPtr s, int l)
        {
            #region
            CopyMemory(d, s, l);
            #endregion
        }
    }
}

 
 
 
 

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">