c++ - ABI 与 C++ 标准

标签 c++ assembly x86 cpu abi

我试图了解 ABI(比如 System V)和 C++ 标准的区别。所以 C++ 标准只是确定合法的 C++,以便编译器可以将其转换为足够的汇编代码。 ABI 然后规范这个汇编代码如何与 x86 架构交互?这是两者之间更高层次的比较吗?

我问的原因是对低延迟软件感兴趣,我想知道读取 ABI 会包含多少值(value)?

最佳答案

该标准根据您编写的代码定义程序应该做什么。 ABI 定义了特定平台的实现方式,以便在不同运行(可能由不同的编译器/版本)编译的代码可以交互。

也就是说,当你写:

void f(int i) { std::cout << i; }

标准定义了行为:对该函数的调用将导致参数值的打印输出。 ABI 决定程序集是如何生成的,以便函数可以被调用(f 的名称是如何被破坏的?)参数可以被传入(参数会在堆栈中的某个地方吗?在一个注册?)。

关于问题的粗体部分......好吧,这取决于。 ABI 是重读物,很难阅读和理解它们。但你至少应该熟悉一些基础知识,比如 calling conventions (传递 T 类型的对象的成本是多少?)...除此之外,我会将其作为一种 react 性方法:概要文件,如果您需要了解正在发生的事情,ABI 可能会有所帮助.

大多数程序员不了解他们平台的 ABI,但他们生活得很愉快。为了理解程序行为的一些特殊性,我特别来回走了几次。

关于c++ - ABI 与 C++ 标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17449380/

相关文章:

c++ - 是否为空函数将参数加载到缓存中?

c++ - 使用 db.isOpen() 检查数据库连接

assembly - 8086/8088 上的有效地址计算时间

c++ - 如何验证 rect 是否在 OpenCV 中的 cv::Mat 内?

c++ - 字符串转为二进制

C 到汇编,每条指令翻译器

assembly - 第一个汇编程序错误 "too many references for mov"

assembly - 是否有不同 x86_64 操作和 C std lib 函数使用的寄存器列表?

assembly - AVX512BW:使用bsf/tzcnt处理32位代码中的64位掩码吗?

linux - 跳转后寄存器和变量不保存状态