在以下 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添加到那里?
在 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)
对我来说,它似乎使语法变得复杂,而没有提供任何实际的好处(可能在开发环境之外)。基于此:
type在语言本身中包含约束?据我所知,我在 python 代码库本身中也没有看到这么多——大多数类型都是手动强制执行的,例如:以及我在https://github.com/python/argparse.py中浏览过的任何其他文件cpython/blob/3.7/Lib/ .
我有大量来自 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
是否有文字语法来写 achar或short?例如:
4 --> 整数4L --> 长4LL --> 长长的或者,您是否需要将其转换为文字符号,例如:
(char) 4 --> 字符(short) 4 --> 短注意:即使我将它写为'a',它仍然将其识别为int(至少当我在 VS Code 中检查它时)。
让我们采用以下基本 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) 我复制了一个大约一百万行的 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在剪贴板上使用吗?如果是这样,那该怎么办呢?
从 页面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?
以下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. 这是如何运作的?
我有以下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)
这有可能做到吗?