草庐IT

c++ - Linux/gcc 中的 InterlockedIncrement 等价物

这将是一个非常简单的问题(可以重复),但我找不到它。Win32API提供了一组非常方便的原子操作(作为内在函数),例如发出lockaddx86代码的InterlockedIncrement。此外,InterlockedCompareExchange映射到lockcmpxchg。但是,我想用gcc在Linux中做到这一点。由于我使用的是64位,因此不可能使用内联汇编。gcc有内在函数吗? 最佳答案 GCCAtomicBuilt-ins 关于c++-Linux/gcc中的Interlocke

c++ - GCC ABI 兼容性

据我了解,无法链接使用不同版本的GCC应用程序二进制接口(interface)(ABI)的库。每个版本的GCC都有ABI更改吗?如果我使用GCC4.3.2,是否可以链接使用4.3.1构建的库?是否有某种矩阵列出了我可以组合GCC版本的所有方式? 最佳答案 从gcc-3.4.0开始,ABI向前兼容。IE。使用较旧版本创建的库可以与较新版本链接,并且它应该可以工作(反之则不行)。显然,可能存在错误,但文档中只提到了一个:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678

c++ - GCC ABI 兼容性

据我了解,无法链接使用不同版本的GCC应用程序二进制接口(interface)(ABI)的库。每个版本的GCC都有ABI更改吗?如果我使用GCC4.3.2,是否可以链接使用4.3.1构建的库?是否有某种矩阵列出了我可以组合GCC版本的所有方式? 最佳答案 从gcc-3.4.0开始,ABI向前兼容。IE。使用较旧版本创建的库可以与较新版本链接,并且它应该可以工作(反之则不行)。显然,可能存在错误,但文档中只提到了一个:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33678

c++ - GCC 优化基于固定范围的 for 循环,就好像它有更长的可变长度一样

我有一组POD结构,并试图对一个字段求​​和。这是一个最小的例子:structItem{intx=0;inty=0;};typedefItemItems[2];structItemArray{Itemsitems;intsum_x1()const;intsum_x2()const;};intItemArray::sum_x1()const{inttotal=0;for(unsignedii=0;ii这两个sum函数做同样的事情。Clang以相同的方式编译它们。但是x86_64上带有-O3的GCC6没有。这是sum_x1(),看起来不错:moveax,DWORDPTR[rdi+8]add

c++ - GCC 优化基于固定范围的 for 循环,就好像它有更长的可变长度一样

我有一组POD结构,并试图对一个字段求​​和。这是一个最小的例子:structItem{intx=0;inty=0;};typedefItemItems[2];structItemArray{Itemsitems;intsum_x1()const;intsum_x2()const;};intItemArray::sum_x1()const{inttotal=0;for(unsignedii=0;ii这两个sum函数做同样的事情。Clang以相同的方式编译它们。但是x86_64上带有-O3的GCC6没有。这是sum_x1(),看起来不错:moveax,DWORDPTR[rdi+8]add

c++ - 可以强制 GCC 为内存对齐对象生成有效的构造函数吗?

我正在优化在我们应用程序的最内层循环之一中调用的构造函数。有问题的类大约100字节宽,由一堆ints、floats、bools和琐碎的结构组成,以及应该是可简单复制的(它有一个重要的默认构造函数,但没有析构函数或虚函数)。它的构造足够频繁,以至于在此ctor中花费的每纳秒时间,我们需要购买大约6,000美元的额外服务器硬件。但是,我发现GCC并没有为此构造函数发出非常有效的代码(即使设置了-O3-march等)。GCC的构造函数实现,通过初始化列表填充默认值,运行大约需要34ns。如果我使用手写函数代替这个默认构造函数,该函数使用各种SIMD内在函数和指针数学直接写入对象的内存空间,构

c++ - 可以强制 GCC 为内存对齐对象生成有效的构造函数吗?

我正在优化在我们应用程序的最内层循环之一中调用的构造函数。有问题的类大约100字节宽,由一堆ints、floats、bools和琐碎的结构组成,以及应该是可简单复制的(它有一个重要的默认构造函数,但没有析构函数或虚函数)。它的构造足够频繁,以至于在此ctor中花费的每纳秒时间,我们需要购买大约6,000美元的额外服务器硬件。但是,我发现GCC并没有为此构造函数发出非常有效的代码(即使设置了-O3-march等)。GCC的构造函数实现,通过初始化列表填充默认值,运行大约需要34ns。如果我使用手写函数代替这个默认构造函数,该函数使用各种SIMD内在函数和指针数学直接写入对象的内存空间,构

c - 如何在 Linux 中使用 GCC 编译一个简单的源文件

我正在尝试在Linux(Ubuntu)中用C语言编译一组源文件。当我尝试运行以下命令时,我收到一条错误消息,提示未找到“ruby.h”。gcccustom_ext.c这给我以下错误消息。custom_ext.h:10:fatalerror:ruby.h:Nosuchfileordirectory所以我下载了整个Ruby源代码并将其放在虚拟目录/home/braga/ruby_source/ruby_1_8_7中。我知道我需要在路径中包含此目录,以便GCC能够识别和获取ruby​​.h,但我不知道该怎么做。请帮忙!!! 最佳答案 您是

c++ - GCC 错误 : explicit specialization in non-namespace scope

我正在尝试移植以下代码。我知道标准不允许在非名称范围范围内进行显式特化,我应该使用重载,但我只是找不到在这种特殊情况下应用这种技术的方法。classVarData{public:templateboolIsTypeOf(intindex)const{returnIsTypeOf_f::IsTypeOf(this,index);//noerror...}templateboolIsTypeOf(intindex)const//error:explicitspecializationinnon-namespacescope'classStateData'{returnfalse;}temp

c++ - GCC 错误 : explicit specialization in non-namespace scope

我正在尝试移植以下代码。我知道标准不允许在非名称范围范围内进行显式特化,我应该使用重载,但我只是找不到在这种特殊情况下应用这种技术的方法。classVarData{public:templateboolIsTypeOf(intindex)const{returnIsTypeOf_f::IsTypeOf(this,index);//noerror...}templateboolIsTypeOf(intindex)const//error:explicitspecializationinnon-namespacescope'classStateData'{returnfalse;}temp