我试图了解 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/