我正在为Java构建针对Windows的x86-32(IA32)处理器的编译器/汇编器/链接器.
高级概念(我没有任何"源代码":没有语法或词汇翻译,所有语言都是常规的)被翻译成操作码,然后将其包装并输出到文件中.翻译过程有几个阶段,一个是常规语言之间的翻译:最高级别的代码被翻译成中级代码,然后被翻译成最低级别的代码(可能超过3个级别).
我的问题如下; 如果我有更高级别的代码(X和Y)转换为较低级代码(x,y,U和V),那么这样的翻译的一个例子是,在伪代码:
x + U(f) // generated by X
+
V(f) + y // generated by Y
Run Code Online (Sandbox Code Playgroud)
(一个简单的例子)在哪里V是相反的U(与堆栈推送U和pop相比V).这需要"优化"为:
x + y
Run Code Online (Sandbox Code Playgroud)
(基本上删除"无用的"代码)
我的想法是使用正则表达式.对于上面的情况,它将是一个看起来像这样的正则表达式:x:(U(x)+V(x)):null,意思是所有x查找U(x)后跟V(x)和替换null.想象一下更复杂的正则表达式,用于更复杂的优化.这应该适用于所有级别.
你有什么建议?什么是优化和生产快速x86组件的好方法?
32 位和 64 位操作系统有什么区别?
具体来说,64 位操作系统可以在 32 位处理器上运行吗?为什么,为什么不呢?
我需要配置我的Apache实例来重定向模式的请求
/#/something/here
Run Code Online (Sandbox Code Playgroud)
至
/something/here
Run Code Online (Sandbox Code Playgroud)
我试过了
RewriteRule /([\#])/something/here /(.)/something/here
Run Code Online (Sandbox Code Playgroud)
没有成功.有什么想法吗?
string a = "a";
string b = a;
string a = "c";
Run Code Online (Sandbox Code Playgroud)
为什么字符串b仍然具有值"a"而不是"c"?
由于string是一个对象而不是堆栈值类型,这种行为是什么?
谢谢
我不知道术语"懒惰"二进制搜索是否有效,但我正在阅读一些旧资料,我只是想知道是否有人可以解释懒惰二进制搜索的算法并将其与非惰性二进制文件进行比较搜索.
比方说,我们有这一系列的数字:
2, 11, 13, 21, 44, 50, 69, 88
Run Code Online (Sandbox Code Playgroud)
如何11使用Lazy Binary Search查找号码?
我正在学习C ++,目前正在摆弄以下代码:
class Bar;
struct Callback {
virtual void Continue(Bar&) = 0;
};
// ...
void Foo(Bar& _x, Callback& result)
{
// Do stuff with _x
if(/* some condition */) {
// TODO: Force unwind of stack
result.Continue(_x);
return;
}
// Do more stuff with _x
if(/* some other condition */) {
// TODO: Force unwind of stack
result.Continue(_x);
return;
}
// TODO: Force unwind of stack
Bar y; // allocate something on the stack
result.Continue(y);
}
Run Code Online (Sandbox Code Playgroud)
主要思想是,我知道在每个站点都result.Continue被调用时,该函数 …