none
有关C#应用程序内存分配的问题 RRS feed

  • 问题

  • 请问:

          如何手动帮C#的应用程序分配内存?

         类似于Java的: java -Xms256m -Xmx256m Test.java。分配了256m给虚拟机,运行Test.java。

     

         C#的应用程序(exe)执行的时候,系统是自动分配多少内存给虚拟机的?

     

         谢谢^_^

     

    2008年5月8日 2:13

答案

  • 似乎没有什么必要为.NET程序手工的确定应该使用和设置多少内存吧?

    我想我们的估算应该不会比CLR更准确和合理?

    2008年5月13日 7:03
    版主

全部回复

  • 从虚拟内存的角度讲,系统给程序4gb的内存可用空间(32 位系统),具体一开始分配多少实际内存,要看你应用程序的大小,多少.text段,多少.data段,以及引用了多少其他的dll模块。在运行时你要动态(new)申请内存,一般由system.GC的垃圾回收机制帮你分配和管理托管堆上的内存。

    2008年5月8日 5:34
  •  

    这个~弱弱的问下:如何在运行时动态申请内存?
    2008年5月8日 5:56
  •  

    比如你new了一个类,系统会在托管堆上帮你分配好这个类需要的空间。
    2008年5月8日 6:21
  • 针对应用程序(exe),能否通过app.config配置文件,来初始化这个应用程序运行时的虚拟内存呢?

    2008年5月8日 6:29
  • 或者说,如何设置.net 的虚拟机(framework??)的内存大小?

     

    2008年5月8日 7:26
  • 似乎没有什么必要为.NET程序手工的确定应该使用和设置多少内存吧?

    我想我们的估算应该不会比CLR更准确和合理?

    2008年5月13日 7:03
    版主
  • 在不安全代码中使用结构类型就可以,结构里的某个字段可以是固定长度的字节数组.

     

    Code Snippet

    stackalloc

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

     

     

    从msdn抄来的:

    Code Snippet
    // 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

    2008年5月13日 8:07
    版主