什么情况值得在C代码中使用内联汇编?

您可能需要修改低级系统状态(例如,在某些寄存器中显式设置值)。 有些指令可能对系统状态非常敏感,如果没有手写汇编,则无法有效使用。 例如,LL / SC非常适合同步,但是有效的同步(除非您退回到使用基本上是CAS的方式),因为指令对对内存访问(编译器可以免费访问)非常敏感,因此需要手工调试汇编制作)。 您可能想利用编译器不提供或不能为其提供接口的专用指令(例如,SIMD的指令部分或字符串扩展名)。 编译器确实为其中的某些提供了一些内在函数,但是它们是特定于编译器的(而合理地很好地支持GNU内联汇编语法)。 如果您已确定要使用程序集,则可能要问的是是否要在单独的目标文件或内联程序集中使用程序集Blob。 单独的目标文件可能更便于携带,甚至更具可读性,但是它也阻止您内联程序集。 GNU内联汇编允许您指定Clobbers,输入要求和输出,从而允许编译器在内联汇编周围进行智能分配和移动更改(例如,如果内联汇编期望寄存器中有某些值,则可以确保如果内联程序汇编了某个寄存器X中的值,则编译器实际上可以考虑该值,并避免将寄存器X分配给非相关代码段,除非有必要)。 如果要在共享对象中提供程序集,那么这并不是什么大问题,因为在这种情况下,您无论如何都要做出牺牲。

为什么复制计算机文件比移动文件要花更长的时间?

在Unix虚拟文件系统(VFS)中,文件由inode表示。 索引节点存储有关文件的元数据(大小,类型,所有者等),并指向磁盘上的数据块。 目录也是一个索引节点,它不存储文件数据,而是维护索引节点的列表,这些索引节点引用该目录中的其他文件和目录。 复制文件意味着您以两个数据副本和两个inode结尾,一个inode引用原始文件并保留在源目录中,一个inode引用数据的新副本并位于目标目录中。 。 因此,副本的成本就是创建新的索引节点以及分配和复制数据的成本。 它是需要复制的字节数(并由其决定)的函数。 文件系统/设备内的移动只是从一个目录中删除描述文件的索引节点,然后将索引节点放置在另一个目录中。 该引用指向的字节不需要更改。 索引节点也不变。 它只是存储在其他位置。 搬家的成本是不变的; 只是复制inode并将其指向预先存在的字节的开销。 从一个文件系统到另一个文件系统的复制或移动需要在目标文件系统中分配一个inode,将源字节复制到目标文件系统,并(在移动的情况下)删除源文件和inode中的inode。指向源字节的源文件系统。 跨文件系统移动的成本大于跨文件系统复制的成本,因为完成复制后需要删除源字节。 如果将源的inode和数据块与复制操作分开释放,则从理论上讲,这笔费用可以延迟支付(例如,可以将inode放在空闲列表中,然后再释放它,从而允许复制比它早返回)是在移动时以及在同一执行线程上执行的释放。 通常,跨文件系统副本的成本与同一文件系统内的副本的成本相同。

为什么斯堪的纳维亚人会像ROR的创建者David Handerson,Linux的Linus Trovalids creatotr和python的创造者这样的国家呢?

Torvalds来自芬兰,尽管可能会说谎,但通常不称为斯堪的纳维亚半岛。 Python由荷兰人Guido van Rossum设计。 在地理上挑剔并不是问题所在,但是,请原谅。 您列出的软件类型(框架,语言,操作系统)的一个共同特征是,它们都是相当雄心勃勃的设计工作,已经存在商业和非商业选择。 在专业环境中,创建此类事物可能很难证明成本和失败风险。 尽管Rails可能是一个例外,但至少Linux和Python之间具有一个共同点,那就是我认为它们最初是出于其作者的个人满足感而开发的。 可以在业余时间自由地进行一些非重要的项目,这是一种奢侈,但是我认为这对西欧国家(以及北美)相对较高的人口百分位数来说是可行的。 尽管人口数量相对较少,但这会增加出现一些鲜为人知的机会的可能性。 我对印度社会一无所知,但我敢于建议这是一个可能的促成因素,因为我的印象是,在全球范围内,拥有足够的社会保障来长时间使用计算机是一个例外。 第一手,我可以证明,甚至没有必要离开欧洲去寻找一个社区,因为在社区中坐在监视器前的时间太长了,这给您的职业和经济前景带来了无法接受的风险。 业余爱好项目无处不在,只有二十到十个。 在不认识Torvalds或van Rossum的情况下,我不希望他们进行(或可以)进行实验,以使他们摆脱贫困。 我不会推测您指出的失衡是由帝国的集中,历史上的财富,社会/经济层级的结构差异,文化差异还是我完全不知道的所有其他事情造成的。 我要指出的是,在举办/评估了包括来自世界各地的学生在内的少量编程课程之后,我发现在可以分配可用时间和资源的情况下,他们的能力没有任何地理上的偏见。 如果按照您的说法,即按国家人口数量计算,优秀程序员的数量大大超出比例,我建议造成这种差异的原因更可能是由于持续工作/休闲条件的差异而不是由国家造成的起源。…