在我看来,在C和C ++中进行尾recursion优化非常合适,但在debugging时,我从来没有看到指示此优化的帧堆栈。 这样很好,因为堆栈告诉我recursion有多深。 但是,优化也会很好。 有没有任何C ++编译器做这个优化? 为什么? 为什么不? 我该如何去告诉编译器这样做? 对于MSVC:/ O2或/ Ox 对于GCC:-O2或-O3 如何检查编译器是否在某种情况下做了这个? 对于MSVC,启用PDB输出以便能够跟踪代码,然后检查代码 对于GCC ..? 我仍然会对如何确定某个函数是否由编译器进行优化提供build议(尽pipe我发现Konrad让我承认它) 总是有可能通过无限recursion检查编译器是否做到这一点,并检查是否导致无限循环或堆栈溢出(我用GCC做了这个,发现-O2足够了),但是我想能够检查某个我知道会终止的函数。 我很想有一个简单的方法来检查这:) 经过一些testing,我发现破坏者破坏了这个优化的可能性。 在返回语句开始之前,有时可能需要更改某些variables和临时对象的范围,以确保它们超出范围。 如果在尾部呼叫之后需要运行任何析构函数,则不能进行尾部呼叫优化。
一旦你完成了它们,你应该把所有的对象都设置为null (VB.NET中Nothing ) 我知道,在.NET中,处理实现IDisposable接口的对象的任何实例都是必要的,以释放一些资源,尽pipe对象在处置后仍然可以是某种东西(因此在表单中是isDisposed属性),所以我认为它可以仍然驻留在记忆中,或至less部分存在? 我也知道,当一个对象超出范围时,它将被标记为垃圾收集器的下一个传递的收集(尽pipe这可能需要时间)。 所以考虑到这一点,将它设置null速度释放内存的系统,因为它不需要解决它不在范围内,并且是否有任何不良副作用? MSDN文章从来没有在例子中做到这一点,目前我这样做,因为我不能看到伤害。 不过,我遇到了各种意见,所以任何意见都是有用的。
我如何创build一个资源,可以轻松地引用和使用我的程序的各个部分? 我的具体问题是,我有一个NotifyIcon,我想根据程序的状态来改变图标。 一个共同的问题,但我一直在努力奋斗很长一段时间。
我正在开发一个Windows窗体应用程序,需要我调用一个单独的程序来执行任务。 该程序是一个控制台应用程序,我需要将控制台的标准输出redirect到我的程序中的TextBox。 我从我的应用程序执行程序没有问题,但我不知道如何将输出redirect到我的应用程序。 我需要在程序运行时使用事件捕获输出。 控制台程序并不意味着停止运行,直到我的应用程序停止并且文本随机更改。 我试图做的只是从控制台钩输出触发事件处理程序,然后可以用来更新文本框。 我正在使用C#编写程序并使用.NET框架进行开发。 原来的应用程序不是一个.NET程序。 编辑:这是我想要做的示例代码。 在我最后的应用程序中,我将用代码replaceConsole.WriteLine来更新文本框。 我试图在我的事件处理程序中设置一个断点,甚至没有达到。 void Method() { var p = new Process(); var path = @"C:\ConsoleApp.exe"; p.StartInfo.FileName = path; p.StartInfo.UseShellExecute = false; p.OutputDataReceived += p_OutputDataReceived; p.Start(); } static void p_OutputDataReceived(object sender, DataReceivedEventArgs e) { Console.WriteLine(">>> {0}", e.Data); }
之前我问了一个关于为什么我看到这么多的例子使用var关键字的问题,并得到了答案,虽然它只是匿名types的必要条件,但是它仍然被用来使代码“更快”/更容易和“只是因为”。 在这个链接之后(“C#3.0 – Var is not Objec”),我看到这个var被编译成IL中的正确types(你会在中途看到它)。 我的问题是,如果使用var关键字,IL代码还有多less(如果有的话),并且如果在任何地方都使用代码,它会更接近于在代码性能方面有一个可衡量的级别?
我们遇到了一些静态初始化顺序失败的问题 ,我正在寻找方法来梳理大量的代码,以查找可能的事件。 有关如何有效地做到这一点的任何build议? 编辑:我得到一些如何解决静态初始化顺序问题的好答案,但这不是我的问题。 我想知道如何find这个问题的对象。 埃文的答案在这方面似乎是最好的; 我不认为我们可以使用valgrind,但我们可能有内存分析工具,可以执行类似的function。 这只会在给定的构build中初始化顺序错误的情况下捕获问题,并且顺序可能随着每个构build而改变。 也许有一个静态分析工具可以解决这个问题。 我们的平台是在AIX上运行的IBM XLC / C ++编译器。
写错了吗? class A { public: virtual ~A() = 0; }; 为抽象的基类? 至less在MSVC编译…会在运行时崩溃吗?
我search了一些关于如何隐藏自己的控制台窗口的信息。 令人惊讶的是,我能find的唯一解决scheme是hacky解决scheme,它涉及FindWindow() 通过标题find控制台窗口。 我深入了解Windows API,发现有一个更好更简单的方法,所以我想把它发布到这里供其他人查找。 你如何隐藏(和显示)与我自己的C#控制台应用程序相关的控制台窗口?
C ++中数组的最大长度是多less? 这是一个C + +的限制还是依赖于我的机器? 它可以调整吗? 它取决于数组的types? 我能否以某种方式打破这一限制,还是必须寻找更好的信息存储方式? 而最简单的方法是什么? 我所要做的就是在数组中存储long long long,我正在Linux环境中工作。 我的问题是:我需要做什么,如果我需要存储N长整数与N> 10位数组的数组? 我需要这个,因为我正在为学校编写一些密码algorithm(例如p-Pollard),并打到整数和长度的数组表示。
不久以前,有人告诉我,在64位机器上不是64位,我应该总是使用int 。 这对我来说没有意义。 我看过文档(例如苹果官方网站上的文档)说,编译64位CPU时,确实是64位。 我查了一下在64位Windows上find了什么 Windows: long和int保持32位长度,为64位整数定义特殊的新数据types。 (来自http://www.intel.com/cd/ids/developer/asmo-na/eng/197664.htm?page=2 ) 我应该使用什么? 我应该定义一些像uw , sw ((un)signed long )作为一个long如果不是在Windows上,否则检查目标CPU bitsize?