Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么gcc和icc为C++;功能? 我用GCC和ICC编写了一个简单的C++函数。 void modify_array(int* arr, int size) { for (int i=0; i<size; i++) { arr[i] += 1; } }_C++_Gcc_Assembly_Icc - Fatal编程技术网

为什么gcc和icc为C++;功能? 我用GCC和ICC编写了一个简单的C++函数。 void modify_array(int* arr, int size) { for (int i=0; i<size; i++) { arr[i] += 1; } }

为什么gcc和icc为C++;功能? 我用GCC和ICC编写了一个简单的C++函数。 void modify_array(int* arr, int size) { for (int i=0; i<size; i++) { arr[i] += 1; } },c++,gcc,assembly,icc,C++,Gcc,Assembly,Icc,为什么它们是一致的?这些标签名称背后的含义是什么?我认为,icc和gcc遵循相同的名称篡改约定只是巧合,icc在实施该协议时可能借用了gcc的理念。否则,不同的编译器供应商可以自由选择不同的命名约定,因为它没有被标准化 不同编译器(或不同版本的同一编译器,在许多情况下)在不同的名称装饰方案下生成这样的二进制文件,这意味着如果使用创建库的编译器和使用C++的程序使用不同的方案,符号常常无法解决。当ABI的其他方面,例如异常处理和虚拟表布局不兼容时,积极鼓励使用不同的篡改方案来防止链接。 < P>英

为什么它们是一致的?这些标签名称背后的含义是什么?

我认为,icc和gcc遵循相同的名称篡改约定只是巧合,icc在实施该协议时可能借用了gcc的理念。否则,不同的编译器供应商可以自由选择不同的命名约定,因为它没有被标准化

不同编译器(或不同版本的同一编译器,在许多情况下)在不同的名称装饰方案下生成这样的二进制文件,这意味着如果使用创建库的编译器和使用C++的程序使用不同的方案,符号常常无法解决。当ABI的其他方面,例如异常处理和虚拟表布局不兼容时,积极鼓励使用不同的篡改方案来防止链接。

< P>英特尔C++编译器(ICC)与GCC二进制兼容。在许多情况下,客户混合并匹配不同的编译器来构建其项目的不同部分(用GCC和其他的ICC构建某些源文件。在这些情况下,ICC构建二进制文件可以与GCC构建二进制共存,只有当它们是二进制兼容的。也有一些情况下,用户使用英特尔C++编译器构建他的应用程序,但是他的应用依赖于用GCC构建的第三方库。因此坚持GNU命名约定有助于Linux在ICC上与GCC二进制兼容。

< P>他们正在努力地与Linux版本的ICC提供GCC兼容性。而他们正在努力遵循一个行业的C++ ABI标准来给出一个稳定的ABI。这有助于保持稳定的环境。h有助于英特尔相当成功的努力


<> P>当然,不是巧合而是设计,他们使用同一个名字作为提供相同ABI的一部分。< /P>也许ICC可能借用GCC源代码的实现和想法,因为GCC源代码是可用的。因为他们彼此相爱,GCC民间创建了UNIX平台的C++名字修改标准。s、 英特尔公司也遵循这一点。你看到的名称被称为“损坏”来编码函数名的“签名”。你可以通过“demangler”运行它来获得所需的名称,“含义”…这是一个在线名称…给它“\uuuuz12Modify\uArrayPii”并输出“\uModify\uArrayPii(int*,int)”这个答案是误导性的,因为它不正确的解释了编译器使用相同名称的破坏约定的原因。伟大的链接。这是最好的答案,它绝对清楚地表明了这是故意的,并提供了真正的理由。我只是在问了这个问题后才了解了ABI设计的含义。现在我明白了我认为这个答案很有道理。
    .globl __Z12modify_arrayPii
Z12modify_arrayPii:
...