Q
示波器如何工作?
-1
A
回答
0
1
这就是整点 - 其中一个是高层次的,另一个是低层次的。 CPU指令不知道任何有关范围。这是一个内存管理的问题。
“范围”是高级编程环境的一部分 - 编译器检查您(根据编程语言的规则)您可以访问您尝试访问的内容(例如,访问变量x对另一个函数是本地的)。有人可能会说这是减少错误的手段。
正在执行的“真实”代码不知道范围。
1
每个变量名称或函数名称等都对应于内存中存储相应信息或代码的位置。 (这是一个小小的简化,但你明白了)。范围表示从名称到位置的映射。把它当作你喜欢的语言的字典或类似的数据结构。
嵌套作用域作为一种堆栈工作。当语言语法引入一个新的作用域时,一个新的映射被推送到堆栈。当你使用一个变量名称,比如说i
时,编译器或解释器在顶层映射中查找它,然后根据语言规则向上查找(如果找不到)。当范围结束时,相关映射从堆栈中弹出并且以前的映射恢复生效。
工作原理的丑陋细节可能会有所不同:在最简单的情况下,编译器可以生成直接引用内存位置的代码。更现实一点:C编译器生成的可执行对象包含一个“变量表”,它将变量和函数名映射到内存中的位置。链接器通过从另一个模块的符号表中的一个模块查找引用来解析模块之间的引用。名称不是映射到绝对位置,而是映射到某个参考点的偏移量。这允许库是“可重定位代码”,这意味着它们可以在执行期间加载到内存中的任何位置并且仍然正常工作。编译到虚拟机的语言可能会削减一些角落,但原则是相同的。
相关问题
- 1. QMake:示波器如何工作?
- 2. Spring FactoryBean和示波器一起工作
- 3. Gabor滤波器如何工作?
- 4. 如何测试示波器?
- 5. 如何访问示波器?
- 6. 如何在操作过滤器后更新示波器模型?
- 7. 示波器显示
- 8. AngularJS示波器
- 9. 如何阿波罗客户optimisticResponse工作
- 10. 如何在javafx中创建示波器?
- 11. 如何用rspec测试示波器
- 12. 试图从指令中的内部示波器观察外部示波器不工作
- 13. 外部示波器不再以用户界面方式工作
- 14. 试图找出示波器的工作原理
- 15. 低通滤波器不工作
- 16. 电网滤波器doesn't工作价值
- 17. matlab带通滤波器不工作
- 18. 如何获得matlab中示波器波形的实时绘图?
- 19. 带有示波器的` - >`操作员
- 20. 在示波器上
- 21. Java和示波器
- 22. 如何在MATLAB中制作多陷波滤波器?
- 23. 如何显示在回波
- 24. Android波动的不工作?
- 25. Odoo域滤波不工作
- 26. 如何使用括号表示法访问示波器?
- 27. 如何使用QCustomPlot创建示波器类型显示
- 28. 利用协会,如示波器
- 29. 开发Android示波器
- 30. Google API多个示波器
我不确定你的意思。你问为什么我们有范围?或者它们是如何由语言在内部实现的?范围对程序员来说只是一种方便,它们作为编程语言的一部分被强制执行,但是你是对的,最终它只是机器指令(或者是在虚拟机上运行的字节码,用于执行范围规则)。 –
那么他们在程序的设计和编程过程中有什么用处呢? – Apeee
他们保持有秩序的东西,就像书架上的书架一样。一本书只知道它在什么样的架子上,以及在同一个架子上的其他书籍,而不是其他书架上的书籍。想象一下,如果我们只是把所有的书扔进一大堆。管理它们会很难,不是吗? –