小编car*_*ass的帖子

如果我不包含标题,为什么在调用函数之前清除 EAX?

在以下 C 代码中:

#include <stdio.h>
int main(void){getchar();}
Run Code Online (Sandbox Code Playgroud)

它产生以下汇编:

main:
        push    rbp
        mov     rbp, rsp
                 # no extra instruction here when header is included
        call    getchar
        mov     eax, 0
        pop     rbp
        ret
Run Code Online (Sandbox Code Playgroud)

但是,如果我不包含stdio.h在文件中,那么它仍然可以编译,但会添加看起来像随机mov eax, 0指令的内容:

在此处输入图片说明

这是编译器资源管理器:https : //godbolt.org/z/3fTcss。这只是“未定义行为”的一部分,还是有特殊原因将之前的指令call getchar添加到那里?

c assembly x86-64 calling-convention

24
推荐指数
1
解决办法
1624
查看次数

可以强制执行类型提示吗?

在 python 中使用“类型提示”表示法有什么好处吗?

import sys
def parse(arg_line: int) -> str:
    print (arg_line) # passing a string, returning None

if __name__ == '__main__':
    parse(' '.join(sys.argv[1:]))
Run Code Online (Sandbox Code Playgroud)

对我来说,它似乎使语法变得复杂,而没有提供任何实际的好处(可能在开发环境之外。基于此:

  • python 是否有计划type在语言本身中包含约束?
  • “类型提示”有什么好处?我不能轻松地将其放入文档字符串或其他内容中吗?

据我所知,我在 python 代码库本身中也没有看到这么多——大多数类型都是手动强制执行的,例如:以及我在https://github.com/python/argparse.py中浏览过的任何其他文件cpython/blob/3.7/Lib/ .

python types

23
推荐指数
2
解决办法
2万
查看次数

长长在 c99

在 C99 标准中,他们引入了long long. 这样做的目的是什么?在我(有限的)C 编程经验中,我只见过 4 字节的 int 和 8 字节的 long。例如,从编译器资源管理器: 在此处输入图片说明

如果long已经是8,为什么还需要添加另一种long long类型?这对编译器/架构有什么影响?

c assembly types abi long-long

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

用于大型 html 的 DOMParser

我有大量来自 Excel 的 html 剪贴板数据,大约 250MB(虽然它包含很多格式,所以在实际粘贴时,数据比那个小得多)。

目前我正在使用以下内容DOMParser,这只是一行代码,一切都发生在幕后:

const doc3 = parser.parseFromString(htmlString, "text/html");
Run Code Online (Sandbox Code Playgroud)

然而,解析它需要大约 18 秒,在此期间页面完全阻塞,直到它完成——或者,如果卸载给网络工作者,一个没有任何进展的动作,只是“等待”18 秒,直到某些事情最终发生- 我认为这与冻结几乎相同,即使是的,用户可以真正与页面交互

有没有其他方法来解析一个大的 html/xml 文件?也许使用一些不会立即加载所有内容的东西,因此可以响应,或者什么可能是一个很好的解决方案?我想以下内容可能符合它?但不太确定:https : //github.com/isaacs/sax-js


更新:这是一个示例 Excel 文件:https : //drive.google.com/file/d/1GIK7q_aU5tLuDNBVtlsDput8Oo1Ocz01/view?usp=sharing。您可以下载文件,在 Excel 中打开它,按 Cmd-A(全选)和 Cmd-C(复制),它会将数据粘贴到剪贴板中。对我来说,复制剪贴板中的 text/html 格式需要 249MB。

是的,它也可以在 teext/plain(我们用作备份)中使用,但从 text/html 中获取它的重点是捕获格式(两种数据格式,例如 numberType=Percent,3 位小数和 stylistic ,例如,背景颜色=红色)。请使用它作为任何示例代码的测试。这是test/html剪贴板中的实际内容(asci):https ://drive.google.com/file/d/1ZUL2A4Rlk3KPqO4vSSEEGBWuGXj7j5Vh/view?usp=sharing

html javascript xml dom domparser

6
推荐指数
2
解决办法
539
查看次数

short 或 char(整数)的字面量

是否有文字语法来写 acharshort?例如:

  • 4 --> 整数
  • 4L --> 长
  • 4LL --> 长长的
  • 4C ?
  • 4小时?

或者,您是否需要将其转换为文字符号,例如:

  • (char) 4 --> 字符
  • (short) 4 --> 短

注意:即使我将它写为'a',它仍然将其识别为int(至少当我在 VS Code 中检查它时)。

c

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

“sub $16, %rsp”指令的用途是什么?

让我们采用以下基本 C 函数及其生成的故意未优化的程序集:

int main() {
    int i = 4;
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

它产生以下(未优化的)程序集,这对我来说都是有意义的:

main:
        pushq   %rbp
        movq    %rsp, %rbp
        movl    $4, -4(%rbp)
        movl    $3, %eax
        popq    %rbp
        ret
Run Code Online (Sandbox Code Playgroud)

然而,当我添加一个函数调用时,有两条指令我不太明白:

void call() {};
int main() {
    int i = 4;
    call();
    return 3;
}
Run Code Online (Sandbox Code Playgroud)
main:
        pushq   %rbp
        movq    %rsp, %rbp
        subq    $16, %rsp     <-- why is it subtracting 16?
        movl    $4, -4(%rbp)
        movl    $0, %eax      <-- why is it first clearing the %eax register?
        call    call
        movl    $3, %eax
        leave …
Run Code Online (Sandbox Code Playgroud)

assembly gcc x86-64 calling-convention

4
推荐指数
1
解决办法
2195
查看次数

在javascript中从剪贴板抓取部分数据

我复制了一个大约一百万行的 Excel 表格。当我查看系统上的剪贴板时,它似乎包含大约 250MB 的数据。但是,我需要从中获取样式信息,例如:

在此输入图像描述

整个数据的大小(远)不到 1MB。有没有办法像读取文件或流一样读取剪贴板,以便我可以执行以下操作:

clipboard.read(1024)
Run Code Online (Sandbox Code Playgroud)

否则,如果我做直线:

evt.clipboardData.getData('text/html')
Run Code Online (Sandbox Code Playgroud)

并在拿到数据抓取我想要的那一段数据,我花了10多秒的时间才完成!然而我相信如果我能够以部分方式读取剪贴板数据(就像它是一个文件一样),该事件应该只需要 0.1 秒左右。

我在这里能做什么?可以FileReader在剪贴板上使用吗?如果是这样,那该怎么办呢?

javascript clipboard performance

4
推荐指数
1
解决办法
733
查看次数

如果为正则设置字节

从 页面SETcc,我可以做一个测试,看看一个(有符号的)数字是否为负数:

test %ax, %ax
sets %r10b
Run Code Online (Sandbox Code Playgroud)

如果一个数字为零,则:

test %ax, %ax
setz %r10b
Run Code Online (Sandbox Code Playgroud)

是否有条件检查某事是否为正。我正在寻找一个 ZF=0 和 SF=0 的,如果存在的话。检查(签名)数字是否为正的建议方法是什么?

我唯一能想到的是:

cmp %ax, $0
setg %r10b
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点test

x86 assembly

3
推荐指数
1
解决办法
48
查看次数

使用 lea 进行加法

以下C代码:

int sum(int x, int y) {
    return x + y;
}
Run Code Online (Sandbox Code Playgroud)

编译为:

add:
        leal    (%rdi,%rsi), %eax
        ret
Run Code Online (Sandbox Code Playgroud)

我只见过lea用于将内存地址从一个地方移动到另一个地方,但这里似乎正在将值总和移动到eax. 这是如何运作的?

c x86 assembly

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

海象运算符,多项作业

我有以下while循环:

import re
line = "This is my line"
reg = re.compile('(\S+)\s*(.*)')
while line:
    token, line = reg.match(line).groups()
    print (token)
Run Code Online (Sandbox Code Playgroud)

是否可以将其放入海象运算符表达式中?它似乎不是原生的,但我想知道是否可以通过某种黑客方式来完成,也许可以使用多个:=。理想情况下,应该是这样的:

while (token, line := reg.match(line).groups()):
    print (token)
Run Code Online (Sandbox Code Playgroud)

这有可能做到吗?

python python-3.x

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