小编Mic*_*rge的帖子

x86 NOP和FNOP指令有什么区别?

我正在阅读英特尔指令手册并注意到有一条'NOP'指令在主CPU上没有任何作用,而且一条'FNOP'指令在FPU上什么都不做.为什么有两个单独的指令什么都不做?

我看到的唯一不同之处是它们会抛出不同的异常,因此您可能会从FNOP中查看异常,以检测是否有可用的FPU.但是没有像CPUID这样的其他机制来检测这个吗?有什么实际的理由有两个单独的NOP指令?

x86 assembly x87

8
推荐指数
1
解决办法
1650
查看次数

Mathematica中的动态编程:如何自动定位和/或清除memoized函数的定义

在Mathematica 8.0中,假设我有一些常量:


a:=7
b:=9
c:=13
d:=.002
e:=2
f:=1
Run Code Online (Sandbox Code Playgroud)

我想用它们来评估一些相互关联的功能



g[0,k_]:=0
g[t_,0]:=e
g[t_,k_]:=g[t-1,k]*a+h[t-1,k-1]*b

h[0,k_]:=0
h[t_,0]:=f
h[t_,k_]:=h[t-1,k]*c+g[t-1,k-1]*d

Run Code Online (Sandbox Code Playgroud)

但这真的很慢,需要动态编程,否则你会出现指数减速:


g[0, k_] := 0
g[t_, 0] := e
g[t_, k_] := g[t, k] = g[t - 1, k]*a + h[t - 1, k - 1]*b

h[0, k_] := 0
h[t_, 0] := f
h[t_, k_] := h[t, k] = h[t - 1, k]*c + g[t - 1, k - 1]*d
Run Code Online (Sandbox Code Playgroud)

现在,它的真快,但是如果我们想改变常量(比如,在操纵功能,使用此),我们必须Clear gh每个时间.如果我们有复杂的相互依赖性,这可能是真的很烦人,以清除它们全力以赴我们希望从一个值每一次gh.

有一种简单的方式来运行g,并h …

recursion wolfram-mathematica dynamic-programming exponential

7
推荐指数
2
解决办法
2432
查看次数

你能从调试编译的二进制文件中检索源代码吗?

大约 8 年前,我四处挖掘并找到了我在 Visual C++ 6.0 中编写的内容的可执行文件。我从不备份源代码,但我想我总是在调试模式下编译所有内容。我还依稀记得在某处听说过“除非您拥有编译器的调试符号或其他东西,否则您无法将可执行文件反编译为源代码”。该代码具有情感价值,但我检索它并不是关键任务。

这就是背景;以下是问题:

  1. 如何检查可执行文件是否在调试模式下编译?
  2. 如果是,调试模式可执行文件附带哪些信息?
  3. 我可以检索完整的源代码吗?如果做不到这一点,与发布版本相比,我在反编译时可以获得任何实质性的改进吗?如果是这样,如何?

谢谢,

——迈克尔·伯格

c++ decompiling debug-symbols backup-strategies visual-c++

5
推荐指数
1
解决办法
5870
查看次数

可以定义一个函数来判断一个元素是否是从给定的类型构造函数构造的吗?

我在F#工作,并且有一个类型T,它是几个有区别的联合:

type T =
  | A of string * int
  | B of int
  | C
Run Code Online (Sandbox Code Playgroud)

如果我有一个T列表,我可能想要提取使用A构造的东西.这样的模式匹配很容易:

myList
|> List.filter (fun x -> match x with | A(_,_) -> true | _ -> false)
Run Code Online (Sandbox Code Playgroud)

嵌入式匹配有点冗长,并且在保持下划线数量与A的定义同步方面存在轻微的维护麻烦.我真的很喜欢这样的函数:

let constructedFrom (type constructor) (t : T) : bool = something

myList
|> List.filter (constructedFrom A)
Run Code Online (Sandbox Code Playgroud)

有没有办法定义这个'constructFrom'函数?

f# types discriminated-union

2
推荐指数
1
解决办法
124
查看次数