
我不清楚编译器在需要时如何自动知道编译为64位.它如何知道什么时候可以自信地针对32位?
我很好奇编译器在编译时如何知道要定位的架构.它是否分析代码并根据它发现的内容做出决定?
我发现这个问题关于哪些语言优化尾递归.为什么C#不会优化尾递归?
对于具体情况,为什么不将此方法优化为循环(Visual Studio 2008 32位,如果这很重要)?:
private static void Foo(int i)
{
if (i == 1000000)
return;
if (i % 100 == 0)
Console.WriteLine(i);
Foo(i+1);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用MinGW和GCC 3.4.5(mingw-special vista r3).
我的C应用程序使用了大量的堆栈,所以我想知道是否有任何方法可以以编程方式告诉剩余多少堆栈,因此如果我发现我即将耗尽,我可以干净地处理这种情况.
如果没有其他方法可以解决可能耗尽堆栈空间的问题?
我不知道我将从哪个堆栈大小开始,因此需要以编程方式识别.
如何在Windows 7 x64上禁用ASLR,以便我的程序始终在同一地址加载共享CRT?
我希望能够在异常发生之前预测适合堆栈的递归调用的数量StackOverflow。为此,我需要找出堆栈上给定方法调用的“足迹”。
有没有办法以编程方式做到这一点?我查看了System.Diagnostics.StackFrame,System.Diagnostics.StackTrace但找不到任何相关内容。
根据经验,使用这个简单的例子,我发现足迹非常不同:
很可能不同版本的 .NET 也会产生不同的结果。
总结一下:
看到堆栈帧大小随这些参数变化如此之大,是否有一种编程方法可以在运行时确定给定方法的堆栈帧大小?
“离线”(手动)怎么样?也许至少对于直接的、发布的、非优化的构建?
.net ×3
c# ×3
aslr ×1
c ×1
clr ×1
compilation ×1
jit ×1
mingw ×1
optimization ×1
stack ×1
stack-trace ×1
windows ×1
windows-7 ×1