小编Tyl*_*den的帖子

为什么VC++编译器MOV + PUSH而不仅仅是推动它们?86

在VC++的这个反汇编中,正在进行函数调用.在推送寄存器之前,编译器将本地指针MOV转换为寄存器:

    memcpy( nodeNewLocation, pNode, sizeCurrentNode );
0041A5DA 8B 45 F8             mov         eax,dword ptr [ebp-8]  
0041A5DD 50                   push        eax  
0041A5DE 8B 4D 0C             mov         ecx,dword ptr [ebp+0Ch]  
0041A5E1 51                   push        ecx  
0041A5E2 8B 55 D4             mov         edx,dword ptr [ebp-2Ch]  
0041A5E5 52                   push        edx  
0041A5E6 E8 67 92 FF FF       call        00413852  
0041A5EB 83 C4 0C             add         esp,0Ch 
Run Code Online (Sandbox Code Playgroud)

为什么不直接推他们?即

push  dword ptr [ebp-8]
Run Code Online (Sandbox Code Playgroud)

此外,如果您要单独执行推送,为什么不手动执行此操作.换句话说,不要做上面的"推送eax",而是做

mov [esp], eax
Run Code Online (Sandbox Code Playgroud)

等等.这样做的好处是,在执行3个mov之后,您可以执行单个减法来设置新的堆栈指​​针,而不是通过推送隐式减去三次.

更新---发布版本

这与为发布而编译的代码相同:

; 741  :    memcpy( nodeNewLocation, pNode, sizeCurrentNode );

  00087 8b 45 f8 …
Run Code Online (Sandbox Code Playgroud)

compiler-construction x86 assembly visual-c++

5
推荐指数
2
解决办法
560
查看次数

Rubygems - 包下载的地方在哪里?

安装新软件包时,例如'gem install fb-graph',下载的文件在哪里?

ruby rubygems ruby-on-rails

5
推荐指数
2
解决办法
65
查看次数

在x86汇编中测试负数的最紧凑方法?

目前,我正在这样做以测试x86程序集(r / m32,imm8)中是否为负数:

83F800 CMP EAX, 0
Run Code Online (Sandbox Code Playgroud)

可以跟着JL。这是3个字节,假定时钟为“ 1/2”。我可以使用TEST EAX或CMP EAX,imm32(编码3D),两者的时钟均为“ 1”,但占用5个字节。总的来说,如果我试图最小化代码大小,那么我的做法正确吗?再次,这是为了测试一个数字是否小于零。

x86 assembly

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

Mathematica抗锯齿算法

我有兴趣找到一种抗锯齿算法,可以在任何形状的线上使用(不仅仅是直线).

我注意到Mathematica似乎有一个非常好的算法,可以绘制1或2像素宽的细线.我目前的尽力而为算法通常需要更多像3像素,所以我的线条比Mathematica更粗.

有人知道Mathematica用于抗锯齿的算法,还是可以推荐一种可用于生成亚2像素抗锯齿线和曲线的高质量算法?

algorithm graphics wolfram-mathematica antialiasing

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

找到最长的非负子数组

我正在寻找一种更有效的替代蛮力来寻找具有非负和的阵列的最长子阵列.该数组中的数字范围为-5到5.

例如,如果您有一个数组A:

4 2 -5 3 0 -2 -2 -3 4 -4 -3 -2 1

那么最长的非负子阵列是

4 2 -5 3 0 -2 -2 -3 4,长度为9

我正在考虑的解决方案是保持最佳解决方案和最佳后缀,其中最佳后缀始终以最后检查点结束A[i].如果最佳后缀比最佳解决方案更长,我们会将最佳解决方案更新为最佳后缀.

后缀将由夹在两个正子阵列之间的负子阵列构成.所以,在这种情况下从左到右:

4 2是第一正子阵列-5是负子阵列3 0 -2是第二正子阵列

然后程序检查两个正子阵列的总和是否大于负子阵列.如果是这样,整个最佳后缀成为新的第一个正子数组.如果不是,则转储第一个正和负子阵列,并且第二个正子阵列成为第一个子阵列,依此类推.

理论上,程序应该能够逐步检查线性时间内的最佳解决方案.

但这个答案似乎是不正确的.

所以我正在寻找一个更好的解决方案,或者至少提示一个更好的方向

任何帮助,将不胜感激!

arrays algorithm performance

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

ruby中大型数组中的快速近似字符串匹配

在Ruby中,我有一个由大约一百万个字符串组成的数组dictionary_array.我有另一个由大约数千个字符串组成的数组arr.

对于每个元素arr,我想找到一个dictionary_array最接近的元素.

迭代每个元素arr,并且arr迭代每个元素dictionary_array以找到具有最小Levenshtein距离的元素是O(n ^ 2)并且对于我的目的而言太慢.

有没有更好的方法来解决这个问题?

ruby algorithm fuzzy-search levenshtein-distance

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

所有七种方式反映方阵的八分圆的算法

在甚至尺寸的方阵ss/4(s/2+1)可反射的基质周围七个不同的方式平方类型.例如,10 x 10矩阵的独特方块在下图中着色:

卦限

这15个方块可以以7种不同的方式围绕矩阵的水平轴,垂直轴和对角轴反射.

假设为nxn数组的每种类型的元素分配了唯一值,其中n是偶数,那么填充矩阵(C或Java)的最有效方法是什么?换句话说,给定您希望的任何结构中的15个值的列表,您需要通过反射使用15个值填充10 x 10阵列的其余部分.这样做的最快算法是什么?

作为一个例子,这是我第一次尝试(注意它使用基于一个的数组):

public static int[][] valueSquare = new int[11][11];
public static int[][] valueSquareType = {
        { 0, 40,  2, 12, 15, 20 },
        { 0,  2,  1,  4,  8, 12 },
        { 0, 12,  4, 25, 20, 15 },
        { 0, 15,  8, 20, 22, 18 },
        { 0, 20, 12, 15, 18,  0 },
};
static {
    for( int x = 1; x <= 5; x++ ) for( int …
Run Code Online (Sandbox Code Playgroud)

c java arrays algorithm matrix

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

为顺序访问的文件使用内存映射有什么好处吗?

我有一个应用程序,我在Java中纯粹按顺序处理文件.文件打开,直读一次然后关闭.

目前我只使用文件频道.存储器映射文件有一个选项.这样做有什么好处吗?

java io file

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

堆栈是否在缓存中?

在现代计算机中,我知道当前代码区域在高速缓存中。但是,在许多计算机语言实现中,本地(自动)变量将位于堆栈中,因此将有大量内存访问堆栈。

堆栈是否在正常架构中的另一个缓存中?

如果不是,则假设堆栈可以重新定位为“本地”,即非常靠近当前代码段,以便它位于用于代码的缓存内。这会加速自动变量的内存访问吗?

memory performance stack caching

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

可以替换的最小子字符串使字符串具有相同数量的每个字符

我正试图解决几乎就是这个问题.特别是我给一个字符串s,使得s.Length % 4 == 0s[i]是一个'A','C','T''G'.我想找到我可以更换,使每个最小子'A','C','T''G'准确显示s.Length / 4时间.

例如,使用s="GAAATAAA"中,一个最佳的解决方案是更换一个子"AAATA""TTCCG",从而产生"GTTCCGAA".

我在下面的评论中描述了我的方法,我想知道它是否真的正确,因为它会让我得到正确的答案.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
class Solution
{
    static string ReplacementForSteadiness(string s)
    {   
        var counter = new Dictionary<char,int>() {
            { 'A', 0 }, { 'C', 0 }, { 'G', 0 }, { 'T', 0 …
Run Code Online (Sandbox Code Playgroud)

c# string algorithm dynamic-programming time-complexity

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