c# BigInteger和int如何节省内存

本文关键字:何节省 内存 int BigInteger | 更新日期: 2023-09-27 18:14:00

我正在测试一个矩阵,如果它在每一行都有一个素数。

MR意味着它应该使用Miller Rabin算法。如果它为假,它只是尝试除数直到根号(n)凡索为真,如果它在每一个被检查的行中都找到了一个素数;凡索为真,如果它在实际检查的行中找到了一个素数。

我的问题是:是否有可能通过不创建int和BigInteger值来节省内存,只有当tryParse为真?我是说像

这样的东西
if (int.tryParse(akt, out new int szam))

这样的事情可能吗?(BigInteger不带符号时占用多少内存?)

    akt = Console.ReadLine();
    int szam; BigInteger szambig;
    if (int.TryParse(akt, out szam))
    {
       if (MR)  {
          if (MilRab(szam))
          { vansor = true; vanoszlop = true; } }
          else if (Prim(szam))
          { vansor = true; vanoszlop = true; }
    }
    else if (BigInteger.TryParse(akt, out szambig))
    {
       if (MR) {
          if (MilRab(szam))
          { vansor = true; vanoszlop = true; } }
       else if (Prim(szam))
       { vansor = true; vanoszlop = true; }
    }

c# BigInteger和int如何节省内存

我不是100%确定。net IL如何优化内存,但一般来说,局部"值"类型(与"引用"类型相反)保留在堆栈上。在IE中,如果不实例化整数,则只能节省~4字节,并且仅用于该调用的生命周期。一旦退出函数,堆栈将被清空。

结构是"值"类型,也放在堆栈上。它们为所有其他值类型保留内存&根据需要引用指针。无论Signed为真还是假,BigInteger的大小都是一样的。

我想我真正的问题是:为什么记忆困扰?在您的代码示例中,您将占用几十字节的内存,当方法退出时,这些内存将全部被释放。

如果您设法做到这一点,最多可以节省BigInteger在64位模式下占用的16个字节(我猜)。

我很确定那不值得担心。在这16个字节很重要的情况下:

    你可能不应该使用。net
  1. 你很可能没有。net可用