历史上,为什么它看起来像是每个人和他们的孩子兄弟定义他们自己的调用约定?你有C,C++,Windows,Pascal,Fortran,Fastcall,可能还有一些我不认为提及的其他人。对于绝大多数用例来说,不应该有一个约定是最有效的吗?是否有任何理由相对于另一方偏好?为什么有这么多不同的调用约定?
8
A
回答
10
1
因为历史上每个人和他们的孩子兄弟确实定义了自己的调用约定。它们都是为不同的目的而创建的,因此受到不同性能需求的驱动。例如,C++主张优化传递参数this
。
1
- 其中一些更高效的性能和其他更有效的代码大小。
- 只有一些约定支持某些功能(可变参数数量)。
0
一部分是微处理器(或处理器)的底层结构。大多数语言都是从特定的CPU开始的,并且与该体系结构纠缠一点。例如,旧的Univac 1100系列计算机甚至没有调用堆栈!
另一部分原因是,直到你尝试了几种做事方式,才能预见到最佳解决方案。
0
它们是为不同的目的和不同的优化系统而创建的。例如,为了减少“堆栈溢出”(无双关意图),一些人想到各种不同的想法来调用函数来使堆栈溢出成为不可能。
另一个实例是Lambda微积分。不要太模糊,但在Lambda中,函数只能传递一个参数并返回一个值,因此也需要自己的调用约定。
相关问题
- 1. Autolayout:为什么这些相同的约束有所不同?
- 2. 为什么这么多sp_procedure_params_100_managed调用?
- 3. 为什么有这么多不同的base64实现?
- 4. 为什么XML ID名称约定与Java的约定不同?
- 5. 为什么这两个javascript调用addEventListener有不同的结果
- 6. 为什么Atom使用这么多不同的链接关系?
- 7. 这些有什么不同
- 8. 为什么Go的编译器“gc”使用与C不同的调用约定?
- 9. MASM x64调用约定 - 为什么allocstack在这里需要多次?
- 10. 为什么这个约定调用后的代码不会运行?
- 11. 什么是自定义调用约定?
- 12. 为什么perldoc中有这么多ESC?
- 13. ARM模式,为什么有这么多?
- 14. 为什么会有这么多空间?
- 15. System.Collections - 为什么有这么多选项?
- 16. 网络中有这么多不同的协议需要什么?
- 17. 为什么这么多canOpenURL?
- 18. 为什么这是不同的行为?
- 19. 为什么调用不同的网站
- 20. 为什么不调用这个函数?
- 21. 为什么不调用这个方法?
- 22. 为什么这些调用具有相同的内存地址?
- 23. 为什么Linux不遵循Unix系统调用约定?
- 24. 为什么我的应用程序等待同步这么多?
- 25. 为什么谓词命名约定在不同函数之间有所不同?
- 26. 为什么这个约束在不同的模拟器上表现不同?
- 27. 我不明白为什么有这么多的空白空间?
- 28. 为什么谷歌云中不同的包或命名约定?
- 29. 为什么会有这么多的Rails记录器,为什么会有锁?
- 30. 为什么Grails不遵循更多的“Maven3”风格约定
+1我第二个问题! – Poni 2010-08-06 22:54:03