我用 gcc 和 icc 编译了一个简单的 C++ 函数。
void modify_array(int* arr, int size) {
for (int i=0; i<size; i++) {
arr[i] += 1;
}
}
我很惊讶地看到 gcc 和 icc 生成具有相同标签名称的程序集。
.globl __Z12modify_arrayPii
Z12modify_arrayPii:
...
为什么它们是一致的?这些标签名称背后的含义是什么?
最佳答案
Intel state他们正在努力使 ABI 与 GCC 与 ICC 的 Linux 版本兼容。而 GCC maintainers state他们正在努力通过遵循行业 C++ ABI 标准来提供稳定的 ABI。这有助于保持稳定的环境,这有助于英特尔相当成功的努力。
因此,它们使用相同的名称重组作为提供相同 ABI 的一部分当然不是巧合,而是设计使然。
关于c++ - 为什么 gcc 和 icc 为 C++ 函数生成具有相同标签名称的 asm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22574081/