zoukankan      html  css  js  c++  java
  • [原]ABI 应用二进制接口

    运行时惯例集合在所有处理处理二进制表示的工具之后, 包含编译器, 汇编器, 连接器, 以及语言运行时支持. 一些ABI通过书写特征, 可能的多个兴趣部分的设计, 来规范. 其他简化一组特定工具的实际使用.
    ABI 一致性:
    一个编译器对某个ABI一致, 如果他产生的代码满足所有的ABI规范. 一个库一致于一个ABI, 如果他是根据那个ABI实现的. 一个应用一致于ABI, 如果他是通过工具构建的,工具保证一致于ABI并且不包含源代码特化变化行为被ABI所定义.
    调用惯例:
    调用惯例是ABI的一个子集, 确定蚕食如何传递和函数结果如何返回.
    互操作性:
    不同的工具集是可互操作的, 如果他们产生的文件可以被相同的程序使用. 工具集合包括编译器, 汇编器, 连接器, 库, 头文件, 启动文件, 以及调试器. 二进制被不同的工具集生成, 是不可互相操作的, 如果他们没有实现相同的ABI. 这适用于不同版本的同样的工具, 以及不同开经销商的工具.
    实现定义特征:
    语言标准包括一系列实现定义的特这, 他的行为可能在不同实现件变化巨大. 一些特征通常被包含进平台的ABI, 但是其他没有. 未被包含特征通常影响程序行为, 不具有互相调用能力.
    兼容性:
    一致于同样的ABI, 并且有同样的实现定义的特征,都是与兼容性密切相关的.
    application binary interface被c或c++编译器所实现, 将会影响代码生成, 运行时支持:
    数据类型的大小, 对齐;
    结构化类型的布局;
    调用惯例;
    寄存器使用惯例;
    运行时算术支持接口;
    目标文件格式;
    另外, c或c++编译器实现的ABI也影响一下代码生成和运行时支持:
    名字变化;
    异常处理;
    调用构造, 和解构;
    布局, 对齐, 类填充;
    布局, 对齐, 实表;
    一些gcc编译选项引起编译器生成的代码与平台默认的ABI不一致. 另外一些选项引起不同的程序行为, 对于实现定义的特征未被ABI所包含. 这些选项是为了与其他编译器(未与平台ABI一致)兼容而给出的, 或者因为一些非常规的实现定义特征的行为. 应该注意这些选项.

    大多数平台有良好的定义的ABI包含c代码,.

    从gcc3.2开始, gcc二进制惯例对c++是基于书写的, 销售商中立的c++ABI, 设计用来于64为的Itaninum机器, 但是也包括同用到特征.





    作者:liyonghelpme 发表于2010/6/10 13:44:00 原文链接
    阅读:765 评论:1 查看评论
  • 相关阅读:
    构建之法阅读笔记03
    《学生快捷记账系统》——个人博客03——星期三
    《学生快捷记账系统》——个人博客02——星期二
    《学生快捷记账系统》——个人博客01——星期一
    构建之法阅读笔记02
    四则运算2
    Centos7 更新配置为阿里源步骤
    Git 的安装
    Dockerfile
    Docker 问题[Warning] IPv4 forwarding is disabled. Networking will not work.
  • 原文地址:https://www.cnblogs.com/liyonghelpme/p/4273556.html
Copyright © 2011-2022 走看看