我从未明白ABI是什么.请不要指向维基百科的文章.如果我能理解它,我就不会在这里张贴这么长的帖子.
这是我对不同界面的看法:
电视遥控器是用户和电视之间的接口.它是一个现有实体,但本身无用(不提供任何功能).遥控器上每个按钮的所有功能都在电视机中实现.
接口:它是间"现有实体"层
functionality
和consumer
的该功能.接口本身不起作用.它只是调用后面的功能.现在取决于用户是谁,有不同类型的接口.
命令行界面(CLI)命令是现有实体,消费者是用户和功能所在.
functionality:
我的软件功能解决了我们描述这个界面的一些目的.
existing entities:
命令
consumer:
用户图形用户界面(GUI)窗口,按钮等是现有实体,消费者再次是用户和功能所在.
functionality:
我的软件功能解决了我们描述这个界面的一些问题.
existing entities:
窗口,按钮等..
consumer:
用户应用程序编程接口(API)函数(或更正确的)接口(在基于接口的编程中)是现有实体,这里的消费者是另一个程序而不是用户,并且该层后面的功能也是如此.
functionality:
我的软件功能解决了我们描述这个界面的一些问题.
existing entities:
函数,接口(函数数组).
consumer:
另一个程序/应用程序应用程序二进制接口(ABI)这是我的问题开始的地方.
functionality:
???
existing entities:
???
consumer:
???
ABI涵盖了诸如此类的详细信息
- 数据类型,大小和对齐方式;
- 调用约定,它控制函数参数的传递方式并返回检索的值;
- 系统调用号码以及应用程序应如何向操作系统进行系统调用;
其他ABI标准化细节,如
- C++名称错误,
- 异常传播,和
- 在同一平台上调用编译器之间的约定,但不需要跨平台兼容性.
谁需要这些细节?请不要说操作系统.我知道汇编编程.我知道链接和加载是如何工作的.我确切地知道里面发生了什么.
为什么C++名称输入?我以为我们正在谈二进制.语言为什么会进来?
无论如何,我已经下载了[PDF] System V Application Binary Interface Edition 4.1(1997-03-18),看看它究竟包含了什么.好吧,大部分都没有任何意义.
为什么它包含两章(第4和第5章)来描述ELF文件格式?实际上,这些是该规范中仅有的两个重要章节.其余章节是"处理器特定的".无论如何,我认为这是一个完全不同的话题.请不要说ELF文件格式规范是 ABI.根据定义,它不符合接口的条件.
我知道,因为我们谈论的水平很低,所以必须非常具体.但我不确定它是如何"指令集架构(ISA)"具体的?
我在哪里可以找到Microsoft Windows的ABI?
所以,这些是困扰我的主要问题.
标题说明了一切.我特别谈论C/C++,因为他们都认为这是"实施问题".我认为,定义标准接口可以轻松构建模块系统,以及许多其他好东西.
如果他们定义了标准的ABI,C/C++会"丢失"什么?