我正在测试一个矩阵,如果它在每一行都有一个素数。
MR意味着它应该使用Miller Rabin算法。如果它是假的,它只是尝试除数达到sqrt(n)。如果Vansor在每个检查行中找到一个素数,则为真,如果在实际检查的行中找到了素数,则vanoszlop为真。
我的问题是:只有在tryParse为true时才能通过不创建int和BigInteger值来保存内存吗?我的意思是
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; }
}
答案 0 :(得分:0)
我不是百分之百地确定.Net IL如何优化内存,但通常是本地"值"类型(而不是"引用"类型)保留在堆栈中。 IE,你只需要通过不实例化它来保存整数占用的~4个字节,并且只保存那个调用的生命周期。退出函数后,堆栈将被清除。
结构是"价值"类型,也放在堆栈上。他们为所有其他价值类型保留记忆。根据需要引用指针。无论是否"签名" BigInteger的大小都是相同的。是真还是假。
我想我真正的问题是:为什么记忆会被困扰?使用您拥有的代码示例,您将占用几十个字节的内存,当方法退出时,这些内存将被释放。
答案 1 :(得分:0)
如果你设法做到了,最多可以节省BigInteger
在64位模式下占用的16个字节(我猜)。
我很确定这不值得担心。在这16个字节很重要的情况下: