Questions tagged «low-level»

有关系统低级方面的问题:靠近底层细节和硬件的编程。


11
为什么隐秘的短标识符在低级编程中仍然如此普遍?
曾经有很保持指令很好的理由/注册短名称。这些原因不再适用,但是简短的加密名称在低级编程中仍然很常见。 为什么是这样?仅仅是因为旧习惯难以改变,还是有更好的理由? 例如: Atmel ATMEGA32U2(2010?):(TIFR1代替TimerCounter1InterruptFlag),ICR1H(代替InputCapture1High),DDRB(代替DataDirectionPortB)等。 .NET CLR指令集(2002):(bge.s而不是branch-if-greater-or-equal.short)等。 较长的非加密名称不是更容易使用吗? 在回答和投票时,请考虑以下内容。这里建议的许多可能的解释同样适用于高级编程,但是,普遍的共识是使用由一个或两个词组成的非加密名称(不包括通常理解的首字母缩写词)。 另外,如果您的主要论点是关于纸质图表的物理空间,请考虑这绝对不适用于汇编语言或CIL,此外,如果您向我展示一个简短名称适合但易读的名称的图表,我将不胜感激。 。从无晶圆厂半导体公司的个人经验来看,可读名称恰好适合,并可以使图更易读。 低级编程与高级语言相比有什么不同的核心之处,高级语言使简洁的加密名称成为低级编程而不是高级编程的理想选择?

4
用于Apollo 11任务代码的开发过程?
阿波罗任务的技术并不比袖珍计算器复杂。 在这里的链接中,有有关阿波罗制导计算机(AGC)的信息 机载阿波罗制导计算机(AGC)约为1立方英尺,带有2K的16位RAM和36K的硬线芯绳存储器,铜线穿过或不穿过微小的磁芯。16位字通常是14位数据(或两个操作码),1个符号位和1个奇偶校验位。循环时间为11.7微秒。用反向波兰语用汇编语言和解释性语言进行编程。 因此,当我研究那里的内容时,偶然发现了一些源代码,并且注意到了很多注释(例如,临时,我希望实现希望) VRTSTART TS WCHVERT # Page 801 CAF TWO # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67 TS WCHPHOLD TS WCHPHASE TC BANKCALL # TEMPORARY, I HOPE HOPE HOPE CADR STOPRATE # TEMPORARY, I HOPE HOPE HOPE TC DOWNFLAG # PERMIT X-AXIS OVERRIDE ADRES XOVINFLG TC DOWNFLAG ADRES …

6
为什么许多在C中返回结构的函数实际上返回结构的指针?
return与在函数的语句中返回整个结构相比,返回指向结构的指针有什么好处? 我说的是像fopen其他底层函数一样的函数,但是可能还有一些高层函数也返回指向结构的指针。 我相信这更多是一种设计选择,而不仅仅是编程问题,而且我很想知道更多关于这两种方法的优缺点。 我认为返回指向结构的指针的一个好处的原因之一是能够通过返回NULL指针更容易地判断函数是否失败。 我想返回一个完整的结构NULL会比较困难,或者效率较低。这是正当的理由吗?

10
为什么没有基于高级语言的操作系统?低级语言是否更有效?
在不冒昧的情况下,我想请您考虑一下这种可能性。如今,大多数操作系统都基于相当低级的语言(主要是C / C ++),即使是新的操作系统(例如Android)也使用JNI,底层实现也使用C语言 实际上,(这是一个个人观察),许多用C编写的程序的运行速度比其高级程序要快得多(例如:传输(Ubuntu上的bittorrent客户端)比Vuze(Java)或Deluge(Python)快很多。 )。即使PyPy是一个例外,即使python编译器也是用C编写的。 那么,这是否有特定原因?为什么我们所有具有出色的“ OOP”概念的所谓“高级语言”都不能用于构建可靠的OS? 所以我基本上有两个问题。 为什么用低级语言编写的应用程序比HLL同行更有效?低级语言是否会由于低级语言和更容易转换为机器代码的简单原因而表现更好? 为什么我们没有完全基于高级语言的成熟操作系统?

10
是第一个用机器代码编写的汇编程序吗?
我正在阅读《计算系统的元素:从第一原理构建现代计算机》一书,其中包含的项目涉及从布尔门到高级应用程序(按此顺序)的计算机构建。我正在处理的当前项目是使用我选择的高级语言编写汇编程序,以将Hack汇编代码转换为Hack机器代码(Hack是前几章中构建的硬件平台的名称)。尽管所有硬件都是在模拟器中构建的,但我试图假装我实际上在实际过程中仅使用当时可用的工具来构建每个级别。 就是说,这让我开始思考。使用高级语言编写我的汇编程序当然很方便,但是对于有史以来第一个(即历史上)编写的汇编程序,它不需要用机器代码编写,因为那时已经存在了? 还有一个相关的问题...今天怎么样?如果出现了全新的CPU体系结构,全新的指令集和全新的汇编语法,则如何构造汇编器?我假设您仍然可以使用现有的高级语言来为汇编程序生成二进制文件,因为如果您知道新平台的汇编语言和机器语言的语法,那么编写汇编程序的任务实际上就是文本分析任务,并且与该平台没有内在联系(即需要以该平台的机器语言编写)...这就是我能够在2012年编写我的Hack汇编程序时“作弊”并使用一些预先存在的原因的原因高级语言可以帮助我。

13
全面的程序员需要按位操作有多好?[关闭]
最近,我一直在浏览一些OpenJDK代码,并在其中找到了一些与按位操作有关的有趣代码。我什至在StackOverflow上问了一个问题。 另一个例子说明了这一点: 1141 public static int bitCount(int i) { 1142 // HD, Figure 5-2 1143 i = i - ((i >>> 1) & 0x55555555); 1144 i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); 1145 i = (i + (i >>> 4)) & 0x0f0f0f0f; 1146 i = i …

11
高水平的开发人员花时间研究组装是否明智?[关闭]
显然,对低水平知识的了解在我们的工作中非常重要。 但是,如果您已经在高水平上开发商业软件,并且已经选择了方向但没有任何汇编技能,那么专注于研究与您的方向相关的内容是否更合理?还是有理由要花一些时间来学习低级基础知识? 什么时候为时已晚,什么时候不为时?而如果它是不是太晚了,那么如何将一个去学习最佳(在不花费过多的时间来得到一些深入和理解的意义上)?

13
低级编程-对我有什么用?[关闭]
多年以来,我一直在考虑深入研究“低级”语言。对我来说,这意味着C语言和汇编语言。但是,我还没有时间这样做,也从来没有必要。 现在,因为我看不到任何必要,所以我觉得我应该只是安排某个时间点来学习该主题,或者永远放弃该计划。 我的位置 在过去的四年中,我一直专注于可能会发生变化的“ Web技术”,而我是一名应用程序开发人员,这不太可能发生变化。 在应用程序开发中,我认为可用性是最重要的。您编写的应用程序将被用户“消耗”。这些应用程序越有用,您产生的价值就越大。 为了获得良好的可用性,我相信以下是可行的 良好的设计:经过深思熟虑的功能可通过深思熟虑的用户界面访问。 正确性:如果实施不正确,那么最好的设计一文不值。 灵活性:应用程序A应该不断发展,以便其用户不必切换到具有A可以实现的具有新功能的其他应用程序B。解决同一问题的应用程序的功能不应有所不同,而应在原理上有所不同。 性能:性能有助于获得良好的用户体验。理想情况下,应用程序始终具有响应能力,并且可以相当快地执行其任务(基于其频率)。性能优化的价值超出了用户可察觉的范围,这值得怀疑。 我认为除了性能之外,低级编程不会对我有所帮助。但是,出于性能考虑,以低级语言编写整个应用程序对我来说还为时过早。 我的问题 低级编程可以教给我什么,其他语言不能教给我什么?我是否缺少某些东西,或者仅仅是一项技能,而这对于应用程序开发几乎没有用?请理解,我不是在质疑C和汇编的价值。只是,在我的日常生活中,我非常高兴地了解到这个世界的所有错综复杂的东西并为我进行了管理(主要是通过用C / C ++编写的层以及自己进行汇编)。我只是看不到任何新概念,对我而言只是细节。那对我有什么用呢? 我的结论 感谢大家的回答。我必须说,没有人真的让我感到惊讶,但是至少现在我可以肯定,我会放弃对此感兴趣的领域,直到需要它为止。 据我了解,如今为当今的CPU中使用的处理器编写程序集不仅不必要地复杂,而且有可能导致运行时性能比C语言差。由于OOE的原因,手工优化几乎是不可能的,尽管您没有获得编译器可以自动进行的各种优化。而且,该代码是可移植的,因为它使用了一小部分可用命令,或者经过了优化,但可能仅在一种体系结构上工作。 编写C不再像以前那样需要。如果要用C编写应用程序,我将尽可能使用经过测试和建立的库和框架,这将使我免于实现字符串复制例程,排序算法和其他在大学中用作练习的东西。我自己的代码将以类型安全为代价更快地执行。我既不希望在常规应用程序开发过程中重新发明轮子,也不希望通过查看核心转储来进行调试:D 我目前正在尝试语言和解释器,所以我想发布什么内容,我想尽管C ++也可以做到这一点,但可以将一个可行的概念移植到C上。 再次感谢大家的回答和见解。

9
内存非托管编程的复杂性是什么?
换句话说,自动垃圾收集解决了哪些具体问题?我从来没有做过底层编程,所以我不知道释放资源会变得多么复杂。 GC所解决的错误(至少对于外部观察者而言)似乎是一种很好地了解他的语言,库,概念,习惯用法等的程序员所不会做的事情。但是我可能是错的:手动内存处理本质上是复杂的吗?

7
程序员如何使用高级语言处理低级软件开发?
我对编程有些陌生,而提出这个问题的最佳方法是举一个例子。 我知道如何用Java和C#做基本的事情。诸如小型Windows窗体应用程序之类的东西或使类成为通用类。我基本上一直在学习,并且还没有尝试做任何大的事情。无论如何,我一直很好奇事情在幕后的完成方式,我想你会说。 我知道所有内容都归结为1和0,并且汇编语言基本上为1和0的模式提供命令,但是似乎从那里跳到了:为此使用一个库作为该库。在我看来,没有库就可以执行的所有C#操作都是算术和二进制逻辑。要获取输入或输出,请使用库等。 我知道这个问题对某些人来说似乎很明显,我知道我有很多东西要学,但我什至不知道从哪里开始这样的问题。谢谢。 所以我的问题是这样的: 如果有人要制作虚拟机或Playstation仿真器,操作系统或驱动程序,或将mp3支持添加到媒体播放器,或者制作自己的文件类型,等等。我看不到用C#或Java来完成的方式。 换句话说,如果我读WROX的《 Professional C#》或OReilly的《 Programming C#》之类的书,我会知道该怎么做吗?还是您必须学习汇编语言或诸如C ++这样的低级语言?

5
构建图灵完整处理器所需的绝对最小指令集是多少?
我对处理器如何处理指令有一个大致的了解,但我会花时间在大多数高级语言上工作。也许更接近铁杆的人可以提供一些有价值的见解。 假设编程语言基本上是处理器指令集的高级抽象,那么创建图灵完整机器所需的最基本指令集是什么? 注意:我对硬件体系结构的多样性一无所知,但是-为了简单起见-假设它是具有ALU(如有必要)和指令堆栈的典型处理器。*

10
作为程序员,我应该了解低级和高级编程语言吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 已联系我进行一些工作以通过TCP / IP进行LED遥控显示器的工作,但是我的经验和准备工作主要是关于高级编程语言的。我对与我联系有关这项工作的人说,他告诉我: “如果您自称程序员,那么您应该了解所有这些内容” 程序员真的应该知道底层编程的细节吗?还是考虑到底层编程不是我的专长,我是否可以将其视为黑盒概念,理论知识,但不一定要这样做或实施底层语言解决方案?

3
为什么可执行文件依赖于操作系统而不依赖于CPU?
如果我编写C程序并将其编译为.exe文件,则该.exe文件包含对CPU的原始机器指令。(我认为)。 如果是这样,我怎么可能在运行现代Windows版本的任何计算机上运行编译的文件?每个CPU系列都有不同的指令集。那么.exe,无论使用哪种物理CPU,任何运行适当操作系统的计算机都可以理解我文件中的指令? 同样,通常在某些应用程序“下载”页面上的网站上,您可以下载Windows,Linux和Mac(对于每个操作系统,对于86和64位计算机,通常为两次下载)。为什么每个CPU系列的下载量都没有增加?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.