c++ - 为什么 gcc 和 icc 为 C++ 函数生成具有相同标签名称的 asm?

标签 c++ gcc assembly icc

我用 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/

相关文章:

c++ - C++ 编译器通常会优化静态(全局)引用吗?

编译器和数据类型 => c 作为引用

c++ - 从源代码 : bash: gcc -v/usr/bin/gcc: Is a directory 安装 gcc

汇编 x86 qemu : fatal: Trying to execute code outside RAM or ROM

multithreading - AArch64 - 并行运行 ARM 和 ASIMD 指令

python - SWIG C++ 到 Python : generate a subclass of Python list

c++ - 两个链表的并集 - C++

c++ - `delete this;` 语句期间发生了什么?

gcc - 我的内核原型(prototype)存在问题(x86_64)

gcc - 在标量矩阵加法中使用 vaddss 代替 adds 有什么好处?