草庐IT

asm-asm-tree

全部标签

c - 尝试将 GCC 特定的 asm goto 移植到 Clang

我一直在尝试将一些GNU扩展转换为实际的标准C,以便它可以在clang上运行,知道标准C而不是GNU扩展,我有点不知所措。__asm__(goto("1:"STATIC_KEY_INITIAL_NOP".pushsection__jump_table,\"aw\"\n\t"_ASM_ALIGN"\n\t"_ASM_PTR"1b,%l[l_yes],%c0\n\t"".popsection\n\t"::"i"(key)::l_yes););我试图将其转化为实际的asm,但尚未成功。如果您好奇的话,除了那一部分之外,这是我即将在clang上构建的内核的一部分。

c - 为什么不能将 asm 中调用 c 库 printf 的 stdout 传送到其他程序?

我写了一个简单的NASM程序:打印测试.asmsection.datastr_outdb"val=%d",10,0section.textglobalmainexternprintfmain:PUSH5PUSHDWORDstr_outCALLprintfADDESP,8MOVEAX,1INT80h我正在使用以下命令链接并创建一个可执行文件:nasm-felf-lprinttest.lstprinttest.asmgcc-oprinttestprinttest.o当链接和执行时,这会毫无问题地向控制台打印“val=5”。据我所知,默认情况下调用printf会写入stdout。那么,为什么

Linux 汇编程序错误 "impossible constraint in ‘asm’“

我从Linux下的汇编程序开始。我已将以下代码保存为testasm.c并编译它:gcctestasm.c-ostasm编译器回复:“'asm'中不可能的约束”。#includeintmain(void){intfoo=10,bar=15;__asm____volatile__("addl%%ebx,%%eax":"=eax"(foo):"eax"(foo),"ebx"(bar):"eax");printf("foo=%d",foo);return0;}我该如何解决这个问题?(我从here中复制了示例。)DebianLenny,内核2.6.26-2-amd64gcc版本4.3.2(Deb

linux - asm ("pause") 是做什么的以及为什么要使用它

我在其他人的代码中看到了asm("pause"),我想知道它是做什么的。代码在Linux上由g++编译。此行位于另一个线程中的循环中,如果发生更新,该循环会不断轮询。我怀疑它会让程序在再次轮询之前暂停一下,但我想知道(1)我的猜测是否正确(2)为什么有必要暂停?我们运行代码的机器有很多处理器,我的线程会完全继续轮询它。 最佳答案 基本上这被称为自旋循环,或忙等待。它会尽可能多地消耗CPU资源。这会浪费CPU处理能力并增加功耗。通过放置暂停指令,您是在暗示处理器“这是一个自旋循环”。这迫使处理器不要太聪明而不能做出不必要的预测(优化)

c - 新手 asm : where is the call code?

我写了这个简单的内核模块:#include//forprintk()intinit(void){printk("nKello,everybody!nn");return0;}voidexit(void){printk("nGoodbyenow...nn");}MODULE_LICENSE("GPL");module_init(init);module_exit(exit);我试图理解代码是如何被翻译成asm的,所以我把它转储了:root@ubuntu:/home/alex/Desktop/KModule#objdump-Dkmodule.kokmodule.ko:fileformate

mysql - Postgres 使用 btree 索引 vs MySQL B+trees

我们正在从MySQL迁移到PGSQL,我们有一个1亿行的表。当我试图确定两个系统使用了多少空间时,我发现表的差异要小得多,但发现索引的差异很大。MySQL索引占用的大小比表数据本身大,而postgres占用的大小要小得多。在挖掘原因时,我发现MySQL使用B+树来存储索引和postgresusesB树。MySQL对索引的使用有点不同,它将数据与索引一起存储(由于大小增加),但postgres没有。现在问题:比较数据库中的B-tree和B+树,最好使用B+tree,因为它们更适合范围查询O(m)+O(logN)-其中m在范围和查找中是B+树中的对数?现在在B树中,对于范围查询,查找是对数

MongoDB Tree Model : Get all ancestors, 获取所有后代

我有一个任意的树结构。示例数据结构:root|--node1||--node2|||--leaf1||||--leaf2||--node3|--leaf3每个节点和叶子都有2个属性:id和name。重要查询:1.:给出一个叶子id。查询应返回从根到该叶的整个路径,以及所有节点的id和name属性。返回值是节点的排序数组还是节点嵌套的对象并不重要。示例:如果给定leaf2的id,查询应返回:root(id,name),node1(id,name),leaf2(id,name).2.:给定任意节点id:获取整个(子)树。这里最好检索一个对象,其中每个节点都有一个children数组。想法、

MongoDB Tree Model : Get all ancestors, 获取所有后代

我有一个任意的树结构。示例数据结构:root|--node1||--node2|||--leaf1||||--leaf2||--node3|--leaf3每个节点和叶子都有2个属性:id和name。重要查询:1.:给出一个叶子id。查询应返回从根到该叶的整个路径,以及所有节点的id和name属性。返回值是节点的排序数组还是节点嵌套的对象并不重要。示例:如果给定leaf2的id,查询应返回:root(id,name),node1(id,name),leaf2(id,name).2.:给定任意节点id:获取整个(子)树。这里最好检索一个对象,其中每个节点都有一个children数组。想法、

c++ - 未定义的行为是否适用于 asm 代码?

假设您知道您的软件只能在二进制补码机器上运行,其中有符号溢出行为得到了很好的定义。有符号溢出在C和C++中仍然是未定义的行为,编译器可以随意用“ret”替换整个程序、发动核war、格式化驱动器或让恶魔飞出你的Nose。假设你在内联asm中签名溢出,你的程序是否仍然调用UB?如果是,那么分别编译和链接的汇编器呢? 最佳答案 “未定义的行为”是指C语言。C++标准不定义程序的行为。如果您的程序包含内联汇编,那么应该很清楚它的行为通常不会被C或C++标准描述。其他一些标准甚至可能定义行为,但这并不意味着在C或C++标准的上下文中“定义的行

c++ - 更改 boost::property_tree 读取将字符串转换为 bool 值的方式

我迷失在boostproperty_tree的头文件中,并且由于缺乏关于较低层的文档,我决定询问有什么简单的方法可以覆盖流转换器以更改bool值的方式被解析。问题是在属性树的输入端,有用户,他们可以修改配置文件。可以通过多种方式指定bool值,例如:dosomething.enabled=truedosomething.enabled=trUEdosomething.enabled=yesdosomething.enabled=ONdosomething.enabled=1默认行为是检查0或1,然后使用std::ios_base::boolalpha让流尝试以适合当前语言环境的方式解析