我很好奇为什么下面的代码:
#include <string>
int main()
{
std::string a = "ABCDEFGHIJKLMNO";
}
Run Code Online (Sandbox Code Playgroud)
当使用编译时,将-O3产生以下代码:
main: # @main
xor eax, eax
ret
Run Code Online (Sandbox Code Playgroud)
(我完全理解不需要多余的,a因此编译器可以从生成的代码中完全忽略它)
但是以下程序:
#include <string>
int main()
{
std::string a = "ABCDEFGHIJKLMNOP"; // <-- !!! One Extra P
}
Run Code Online (Sandbox Code Playgroud)
产量:
main: # @main
push rbx
sub rsp, 48
lea rbx, [rsp + 32]
mov qword ptr [rsp + 16], rbx
mov qword ptr [rsp + 8], 16
lea rdi, [rsp + 16]
lea rsi, [rsp + 8]
xor …Run Code Online (Sandbox Code Playgroud) 我目前在我的Global.asax.cs文件中有以下例程:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Arrangement", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
// Debugs the routes with Phil Haacks routing debugger (link below)
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
路由调试器 ......
当我点击时F5,应用程序启动,除非我有一个Index.aspx在~/Views/Home/文件夹中命名的视图,我得到"查看丢失"错误消息,虽然我已重新定义默认路由并删除了HomeController.我希望得到路由调试器,如果不是,那至少是一个请求~/Views/Arrangement/Index.aspx.调试时永远不会遇到
断点RegisterRoutes(Routetable.Routes);.
我已经尝试过构建,重建,重新启动VS,清理,重建等等,但似乎没有任何工作.为什么应用程序不运行当前版本的代码?
通常可以使用哪些策略来减少任何Xcode项目的构建时间?我最感兴趣的是Xcode特定策略.
我正在使用Xcode进行iPhone开发,我的项目正逐渐变得越来越大.我发现编译/链接阶段开始花费比我想要的更多的时间.
目前,我是:
使用静态库使我的大部分代码都不需要在每次清理和构建我的主项目时编译
从我的应用程序中删除了大部分资源,并尽可能在iPhone模拟器中使用硬编码文件系统路径进行测试,这样我的资源就不必在我对其进行更改时不断打包.
我注意到"检查依赖关系"阶段似乎比我想要的时间更长.任何减少这一点的提示都将受到赞赏!
我最近一直在考虑这个问题,在我看来,JIT编译的大多数优点应该或多或少地归结为中间格式,并且jints本身并不是生成代码的好方法.
所以这些是我经常听到的主要的JIT编译参数:
它不像提前编译也没有优势.即时编译有时间限制:在程序启动时,您不能让最终用户永远等待,因此需要权衡某些事情.大多数时候他们只是减少优化.我的一个朋友有分析证据表明内联函数和"手动"展开循环(在过程中混淆源代码)对他的C#号码运算程序的性能产生了积极影响; 在我这方面做同样的事情,我的C程序填写相同的任务,没有产生任何积极的结果,我相信这是由于我的编译器允许进行广泛的转换.
然而,我们被jitted程序包围.C#和Java无处不在,Python脚本可以编译成某种字节码,我确信其他一些编程语言也是如此.我必须有一个很好的理由让我失踪.那么什么使即时编译如此优于提前编译?
编辑为了清除一些混淆,也许重要的是要声明我全都是可执行文件的中间表示.这有很多优点(实际上,实时编译的大多数参数实际上是中间表示的参数).我的问题是如何将它们编译为本机代码.
大多数运行时(或编译器)都倾向于及时或提前编译它们.由于编译器有更多的时间来执行优化,因此提前编译看起来像是一个更好的替代方案,我想知道为什么微软,Sun和所有其他人都在反过来.我对与分析相关的优化有点怀疑,因为我对即时编译程序的经验表现出很差的基本优化.
我用了一个例子与C语言代码,只是因为我需要的例子名列前茅的时间编制与刚刚在时间编译.C代码没有发送到中间表示的事实与情况无关,因为我只需要表明提前编译可以产生更好的即时结果.
我想跟踪GIMP中的一些代码,因此需要启用调试符号的GIMP.我不记得我是否在编译期间启用了它们.如何在不重新编译程序的情况下检查?
我在理解这段代码时遇到了问题:
int[] it = new int[][]{{1}}[0];
Run Code Online (Sandbox Code Playgroud)
为什么它是可编译的,我怎么能理解这样的声明?
我在scala中写了这个,它不会编译:
class TestDoubleDef{
def foo(p:List[String]) = {}
def foo(p:List[Int]) = {}
}
Run Code Online (Sandbox Code Playgroud)
编译通知:
[error] double definition:
[error] method foo:(List[String])Unit and
[error] method foo:(List[Int])Unit at line 120
[error] have same type after erasure: (List)Unit
Run Code Online (Sandbox Code Playgroud)
我知道JVM没有对泛型的原生支持,所以我理解这个错误.
我可以写包装List[String],List[Int]但我很懒:)
我很怀疑,但是,有没有另一种方式表达List[String]不是同一种类型List[Int]?
谢谢.
Java语言规范指定了
在Java编程语言中,数组是对象(§4.3.1),是动态创建的,可以分配给Object类型的变量(§4.3.2).
Object可以在数组上调用类的所有方法.
因此,考虑到数组是对象 - 例如,为什么Java设计者决定不允许继承和覆盖它,toString()或者equals()?
当前语法不允许创建以数组作为基类的匿名类,但我不认为这是他们决定的原因.
在Windows命令提示符下,我可以键入notepad helloworld.cpp哪个将创建一个名为helloworld的.cpp文件并为我打开记事本.
Mac终端是否有类似的功能,最好使用Textmate或Textedit?
我正在使用Xcode开发工具运行Mac OS X Lion 10.7.
我想知道为什么Java中允许以下代码,而不会出现编译错误?在我看来,此代码通过不返回任何内容来中断方法签名String.有人可以解释我在这里缺少的东西吗?
public class Loop {
private String withoutReturnStatement() {
while(true) {}
}
public static void main(String[] a) {
new Loop().withoutReturnStatement();
}
}
Run Code Online (Sandbox Code Playgroud) compilation ×10
java ×3
arrays ×2
debugging ×2
asp.net-mvc ×1
build ×1
c++ ×1
clang ×1
gcc ×1
gimp ×1
inheritance ×1
iphone ×1
jit ×1
macos ×1
overloading ×1
performance ×1
scala ×1
symbols ×1
terminal ×1
type-erasure ×1
typeclass ×1
xcode ×1