C#新手,对内存管理之道不多,只知道C#是自动托管的,不知道在不安全代码中能不能手动分配内存。主要是想实现下面的效果:事先划好几个内存块,比如将200K 划分成 5 块,分别为 20,30, 40,50,60,  在界面上用 5 个Panel, 标明每块的大小。 分配的时候,必须输入 作业名 和申请分配的空间大小,如果 找到还没有分配的内存块,并且 内存块的大小 大于申请的空间大小,这将这块内存块分配给这个作业。 即: 在这个内存块上面标上作业名,表示已经分配。回收的时候,需要用户输入作业名,根据作业名和已经分配的内存块匹配,如果名称相同,则回收内存,将内存块上面的作业名去掉。
  同时 这些内存块面板没有分配的时候,用蓝色显示; 已经分配的用红色显示

解决方案 »

  1.   


    知道怎样分配系统内存,还真不知道如果给作业用。            int cb = 200 * 1024;
                IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(cb);
                //...
                System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr);
      

  2.   

    为什么要用c#做呢
    直接用c++做好了,用c#调好了
      

  3.   

    stackallocunsafe
    {
      int* ptrInt = stackalloc int[4]; //分配可以保存4个int的内存空间.
    }
      

  4.   

    分配内存的可能还好说一点,但是要结合起作业来,就比较麻烦了,就像gomoku说的不知道这么分给作业,不知有没有大神能给个结合了作业的内存分配的代码,大概的就好。等待中。
      

  5.   

    从msdn抄来的:[code]
    // cs_keyword_stackalloc.cs
    // compile with: /unsafe
    using System; class Test
    {
       public static unsafe void Main() 
       {
          int* fib = stackalloc int[100];
          int* p = fib;
          *p++ = *p++ = 1;
          for (int i=2; i<100; ++i, ++p)
             *p = p[-1] + p[-2];
          for (int i=0; i<10; ++i)
             Console.WriteLine (fib[i]);
       }
    }
    [/code]
      

  6.   

    从msdn抄来的:// cs_keyword_stackalloc.cs
    // compile with: /unsafe
    using System; class Test
    {
       public static unsafe void Main() 
       {
          int* fib = stackalloc int[100];
          int* p = fib;
          *p++ = *p++ = 1;
          for (int i=2; i<100; ++i, ++p)
             *p = p[-1] + p[-2];
          for (int i=0; i<10; ++i)
             Console.WriteLine (fib[i]);
       }
    }
    http://msdn.microsoft.com/en-us/library/cx9s2sy4(VS.71).aspx#Mtps_DropDownFilterText