草庐IT

c++ - 有没有办法在 g++/clang++ 中使用自定义修改?

当使用C++模板,尤其是元组时,我经常会得到很长的错位名称,例如_ZN11__sanitizer13InternalAllocEmPNS_28SizeClassAllocatorLocalCacheINS_20SizeClassAllocator32ILm0ELy140737488355328ELm0ENS_12SizeClassMapILm3ELm4ELm8ELm17ELm64ELm14EEELm20ENS_15TwoLevelByteMapILy32768ELy4096ENS_20NoOpMapUnmapCallbackEEES5_EEEEm这在标称情况下显然很好,并且易于调试,但

c++ - 哪个是 G++ 4.4.1 默认分配器?

我想知道在Ubuntu9.1上G++4.4.1中哪个是默认内存分配器。我有兴趣在多线程环境中比较不同的C++分配器。我在哪里可以获得有关默认内存分配器的更多信息?编辑:我指的是新建和删除运算符。唯一的链接是rt和pthread问候 最佳答案 您可以使用LD_PRELOAD变量来使用您自己的分配器。LD_PRELOAD="/path/your_lib_exporting_malloc.so"在同一终端中运行与glibc动态链接的任何应用程序实际上将使用您提供的malloc实现。许多malloc实现都是免费的。*TLSF*jemallo

c++ - G++ 4.6 -std=gnu++0x : Static Local Variable Constructor Call Timing and Thread Safety

voida(){...}voidb(){...}structX{X(){b();}};voidf(){a();staticXx;...}假设在进入main之后,f被多个线程(可能竞争)多次调用。(当然,唯一对a和b的调用是上面看到的那些)以上代码在-std=gnu++0x模式下用gccg++4.6编译时:Q1。是否保证至少调用一次a()并在调用b()之前返回?也就是说,在第一次调用f()时,x的构造函数是否会同时调用一个自动持续时间局部变量(非静态)(而不是在全局静态初始化时间)?Q2。是否保证b()只会被调用一次?即使两个线程第一次同时在不同的核上执行f?如果是,GCC生成的代码通过

c++ - 如何分析 g++/std::mutex 下的锁争用?

问题是否有任何开源工具或是否有人有任何技术/代码来分析std::mutex争用的程度运行代码?我想在每个std::mutex实例的粒度(按时间或数量)计算锁争用的百分比。如果有一个不需要重新编码的嵌入式工具,那就更好了。我正在寻找一种适用于std::thread和g++的技术:在应用程序退出时,我想将互斥锁争用统计信息转储到日志文件中,这样我就可以在实际运行的上下文中监控线程代码的质量。注意我看过thisthread.不幸的是,答案要么需要大量现金,要么在Windows上运行。 最佳答案 我推荐像AMDCodeXL这样的东西或Int

c++ - G++ CAS (__sync_val_compare_and_swap) 问题需要解释

这让我很头疼。我正在尝试实现一些“无锁”代码并使用CAS(gcc__sync_val_compare_and_swap)来完成繁重的工作。我的问题可以用下面的代码显示。volatileboollock;void*locktest(void*arg){for(inti=0;i好的,如果我在10个并发线程中运行上面的代码,一切都很好。但是,如果我将代码改为阅读//acquirealockwhile(__sync_val_compare_and_swap(&lock,lock,true)==true)请注意,我已将“false”更改为“lock”。一切都乱套了,断言//makesureweh

c++ - 如何让 vc++ 和 g++ 在依赖限定类型的类型名方面表现相同?

是否可以为cl.exe提供一个开关,当限定的依赖类型中缺少typename时,它会启用警告或错误?我工作的环境中,开发人员倾向于在一个平台(Windows或Linux)上工作,代码最终每晚都在两个平台上构建。我们遇到了一个问题,人们忘记在Windows上的限定依赖类型上使用typename,VisualC++2008会在可能的情况下自动插入缺失的typename。当他们checkin这样的代码时,它会破坏Linux上的构建,其中g++需要typename。调整Makefile是可取的,这样我们就可以期望在Windows和Linux上有相同的typename行为,以减少构建中断的可能性。

c++ - g++ 实现如何处理这种情况?

这是thisone的后续问题.考虑这个例子:#includeclassA{};classB:publicA{public:inti;virtualvoidFunc()=0;};classC:publicB{public:charc;voidFunc(){}};intmain(){C*pC=newC;A*pA=(A*)pC;std::cout使用VisualStudio2010,输出是(在我的机器上):pC==002DEF90pA==002DEF94(这由问题的acceptedanswer解释)。使用g++,outputis:pC==0x96c8008pA==0x96c8008那么,问题

c++ - 如何在用 gcc(不是 g++)编译的 C 项目中组合 C++ 目标文件?

又一个C/C++集成问题:我正在尝试使用C++库(我们称之为libcl.a)中的功能更新一些遗留C库(我们称之为libcppl.a)。liblc.a库在我的环境中被广泛使用,并链接到许多C项目中,使用GCC(在C编译器模式下):>>gccprog.c-lcllibcl.a目前包括cl.o目标文件(使用gcc从cl.c+cl.h创建)。libcppl.a由cppl.o组成目标文件(使用g++从cppl.cpp+cppl.h创建)。因为现有的应用程序是用C语言编写的,而构建脚本使用的是GCC,所以我希望尽可能简单地过渡到更新后的库。因此,我想继续使用GCC作为主要编译器,但仍然能够链接到更

c++ - g++ 中未定义的 Python 引用

我正在使用以下命令:g++-L/usr/lib/panda3d-L/usr/lib-o"panda3dplayground"./main.o-lpython2.7-lp3pystub-lp3framework-lpandafx-lp3pystub-lpandaexpress-lpanda-lp3framework-lp3direct我收到以下错误:/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyObject_Cmp'/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyUnicod

c++ - 为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习C++和使用终端。我的代码使用g++和C++11编译和运行良好,但在过去的几天里它开始出错,从那以后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C++标准。我首先得到的错误与头文件中的#include有关。不知道为什么会这样,但我通过使用boost/array来绕过它。我无法解决的另一个错误是std::stoi。array和stoi都应该在C++11标准库中。我编写了以下简单代码来演示发生了什么:////stoi_test.cpp////Createdbyecg//#include#include//stoishouldbeinhereintmain