草庐IT

c++ - 共享内存中的 boost::lockfree::queue 出现问题(boost 1.53、gcc 4.7.2/clang 3.0-6ubuntu3)

我在放置boost::lockfree::queue,..>时遇到问题在共享内存中。我需要它,因为我必须能够将超过65535条消息插入队列,而fixed_sized队列限制为65535。以下代码工作正常(但capacity选项暗示fixed_sized):typedefboost::interprocess::allocatorShmemAllocator;typedefboost::lockfree::queue,boost::lockfree::allocator>Queue;m_segment=newboost::interprocess::managed_shared_memo

c++ - gcc 中的 "Assume"子句

gcc(最新版本:4.8、4.9)是否有类似于icc支持的__assume()内置的“assume”子句?例如,__assume(n%8==0); 最佳答案 从gcc4.8.2开始,gcc中没有__assume()的等价物。我不知道为什么-它会非常有用。马夫索建议:#define__assume(cond)do{if(!(cond))__builtin_unreachable();}while(0)这是一个老把戏,至少可以追溯到2010年,甚至可能更早。编译器通常会优化“cond”的评估,因为任何cond为假的评估无论如何都是未定义

c++ - 在 GCC 中使用 -O3 有什么缺点吗?

我从事各种语言的软件工程师工作已有13年,不过我现在才刚刚开始学习C和后来的C++。在学习C时,我正在使用GCC编译器编译我的程序,我想知道使用-O3或其他优化标志是否有任何问题。我的软件是否有可能以我无法在不测试编译代码的情况下捕捉到的方式中断,或者在交叉编译期间,我可能会无意中为不同的平台弄乱一些东西。在我盲目地打开这些选项之前,我想知道我能期待什么。此外,由于-Ofast打开了不符合标准的标志,我倾向于不使用它。我对-Ofast很可能会产生“副作用”的假设是否正确?我浏览了一遍https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.

c++ - GCC C++ 异常处理实现

我想知道GCC是如何为C++程序实现异常处理的。我无法在Web上找到一篇易于理解和不言自明的文章(尽管有很多针对VisualC++的此类文章)。我只知道GCC的实现称为DWARF异常处理。我写了一个小的C++程序并用命令将它翻译成汇编:g++main.cpp-S-masm=intel-fno-dwarf2-cfi-asm这里给出了main.cpp和main.s文件。谁能逐行解释main.s文件的内容,尤其是.gcc_except_table和.eh_frame部分?(我的操作系统是Ubuntu13.0432位。)谢谢!ma​​in.cpp:voidf(){throw1;}intmain

c++ - 为什么 GCC 似乎没有文件系统标准库?

我遇到文件系统库的问题,它应该包含在c++17编译器中,2天后我尝试在树莓派中安装gcc-7.0.2但它没有工作,它不能识别命令gcc-7或g++-7甚至-std=c++17所以我必须使用apt-getinstall安装g++-6和gcc-6无论如何,在安装6版本后,编译器包含c++17。我使用代码块作为IDE,我必须添加一个新的编译器并添加选项-std=c++17来启用它,但是在主代码中,当我包含文件系统库时,它说没有这样的文件或目录。我的问题是,如何正确添加c++17编译器及其库(如文件系统)?? 最佳答案 GCCv7仍然没有实

gcc 4.8.1 : list-initialization for copy constructor doesn't work 中的 C++11

我鼓励这个问题:如果我有classA{public:};intmain(){Aa{};Ab{a};}gcc给出:moves.cc:Infunction‘intmain()’:moves.cc:15:7:error:toomanyinitializersfor‘A’Ab{a};但是当我使用Ab(a)而不是Ab{a}时,所有编译都正确。如果我声明默认构造函数,它也会编译。为什么会这样? 最佳答案 该类是一个聚合,因此列表初始化将执行聚合初始化,并且不会考虑隐式声明的构造函数。因为没有数据成员,所以只有空列表可以是有效的聚合初始化器。Bu

c++ - 如何使用 avr-gcc 在 C/C++ 中执行预主初始化?

为了确保一些初始化代码在main之前运行(使用Arduino/avr-gcc),我有如下代码:classInit{public:Init(){initialize();}};Initinit;理想情况下,我希望能够简单地编写:initialize();但这不能编译...有没有更简洁的方法来达到同样的效果?注意:代码是Arduino草图的一部分,因此main函数是自动生成的,不能修改(例如调用initialize在任何其他代码之前)。更新:理想情况下,初始化将在setup函数中执行,但在这种情况下,还有其他代码依赖于它发生在main. 最佳答案

c++ - 在可见性有限的 `std::terminate` 函数中调用 `noexcept` - gcc vs clang codegen

考虑以下代码片段:voidf();voida(){f();}voidb()noexcept{f();}在上面的场景中,f的主体对于当前翻译单元中的编译器是不可见的。因此,由于b被标记为noexcept,必须在调用方生成额外的代码以确保异常被捕获并且std::terminate被调用。这就是clang++-Ofast-std=c++2a所做的(主干版本):a():#@a()jmpf()#TAILCALLb():#@b()pushraxcallf()popraxretmovrdi,raxcall__clang_call_terminate__clang_call_terminate:#@_

c++ - 这是 GCC 错误吗?使用 union 初始化结构

我可能发现了GCCv4.8.2的错误,但我想在提交之前先检查一下,因为这可能是我做错了什么!以下代码:#includestructMessage{typedefunion{charbyte;constchar*str;}Parameter;Parameterp1;Parameterp2;};intmain(){std::vectormessages_;messages_.push_back({{.byte='a'}});Messagemessage={{.byte='a'},{.str="HelloWorld"}};messages_.push_back(message);messag

Linux---(五)三大工具yum、vim、gcc/g++

文章目录一、yum工具1.Linux中安装软件的方法:2.什么是yum?3.yum源更新二、Linux编辑器--vim1.IDE例子2.vim(1)vim的常用模式及切换模式(2)底层模式常用命令(3)插入模式常用命令(4)视图模式常用命令(5)补充内容(6)vim的配置三、Linux编译器-gcc/g++的使用1.适用于什么语言2.快速查看(1)命令(2)注意点3.回忆一下,程序的翻译(1)须知(2)先有编译器还是先有语言?(3)程序的翻译过程一、yum工具1.Linux中安装软件的方法:(1)源代码安装(不推荐):把源代码编译,形成可执行,编译太麻烦(2)rpm软件包安装(不推荐):安装的