title: What is the limit of the Value Type BigInteger in C#?
body: <p>As described in MSDN <a href="http://msdn.microsoft.com/en-us/library/system.numerics.biginteger%28v=vs.110%29.aspx">BigInteger</a> is :</p>
  
  <blockquote>
    <p>An immutable type that represents an arbitrarily large integer whose
    value in theory has no upper or lower bounds.</p>
  </blockquote>
  
  <p>As I can see BigInteger is a <code>ValueType</code>, as much as I know, a ValueType must have a <strong>maximum size of 16 bytes</strong>.</p>
  
  <p>MSDN goes further saying : </p>
  
  <blockquote>
    <p>an OutOfMemoryException can be thrown for any operation that causes a
    BigInteger value to grow too large.</p>
  </blockquote>
  
  <p>and more :</p>
  
  <blockquote>
    <p>Although this process is transparent to the caller, it does incur a
    performance penalty. In some cases, especially when repeated
    operations are performed in a loop on very large BigInteger values</p>
  </blockquote>
  
  <p>How could it store such big values, as big as <code>double.MaxValue + double.MaxValue</code> ?
  I was told that it has <code>ReferenceType</code> obejects inside it, but all I can find here in its definition in VisualStudio is ValueTypes.</p>
  
  <p>What's its real limit ? And even if doesn't have one, how can it "as a value type" manage to store all that amount of data ?</p>