小编deg*_*ion的帖子

Python字符串处理优化

最近我一直在制作一个python脚本,用于从大文本文件(> 1 GB)中提取数据.问题基本上总结为从文件中选择文本行,并从一些数组中搜索它们的字符串(此数组中最多可包含1000个字符串).这里的问题是我必须找到字符串的特定匹配项,并且该字符串在该文件中可能会出现无限次.此外,还需要一些解码和编码,这会进一步减慢脚本速度.代码看起来像这样:

strings = [a for a in open('file.txt')]

with open("er.txt", "r") as f:
    for chunk in f:
        for s in strings
            #do search, trimming, stripping ..
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法优化这个?我尝试了多处理,但它很少(或至少我实现它的方式)这里的问题是这些块操作不是独立的,strings列表可能在其中一个中被改变.任何优化都会有所帮助(字符串搜索算法,文件读取等)我尽可能多地做了关于循环中断的事情,但它仍然运行得很慢.

python string file-io

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

汇编代码导致递归

我一直在编写一个C应用程序,我需要x86汇编语言.我对汇编很新,下面的代码片段会导致递归:

unsigned int originalBP;
unsigned fAddress;
void f(unsigned short aa) {
    printf("Function %d\n", aa);
}

unsigned short xx = 77;
void redirect() {
    asm {
        pop originalBP
        mov fAddress, offset f
        push word ptr xx
        push fAddress
        push originalBP
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话redirect,它会反复输出:"功能1135"

首先,以下是有关执行此代码的环境的一些信息:

  • 编写此代码以在NTVDM下执行
  • 使用微小的内存模型(所有段指针寄存器指向同一段)

这是我对上面代码应该做什么的期望(这很可能是错误的罪魁祸首):

  • 弹出堆栈并存储值originalBP; 我相信这个值实际上是当前函数的地址,即redirect
  • f参数值(值xx)推送到堆栈
  • 推送f堆栈的地址(因为只有一个段,只需要偏移)
  • 推回地址 redirect

当然,如果这是正确的流程,递归将是明显的(除了打印1135而不是7的部分).但有趣的是,对于没有参数的函数执行相同操作只会产生一行输出,即:

unsigned int originalBP;
unsigned fAddress;
void f() {
    printf("Function");
}


void redirect() {
    asm …
Run Code Online (Sandbox Code Playgroud)

c c++ x86 assembly

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

标签 统计

assembly ×1

c ×1

c++ ×1

file-io ×1

python ×1

string ×1

x86 ×1