草庐IT

ZN5boost

全部标签

c++ - boost 字符串的分配性能

我将一个JavaGC测试程序移植到C++(请参阅下面的代码)以及Python。Java和Python的性能比C++好得多,我认为这是因为每次都必须调用new来创建字符串。我试过使用Boost的fast_pool_allocator但实际上性能从700毫秒恶化到1200毫秒。我是不是使用了错误的分配器,还是我应该做些什么?编辑:使用g++-O3-march=native--std=c++11garbage.cpp-lboost_system编译。g++是版本4.8.1一次迭代在Python中大约需要300毫秒,而在Java中大约需要50毫秒。std::allocator提供了大约700毫

c++ - C++ 程序的单个实例,使用 boost::interprocess

我有一个控制台应用程序,我试图让它一次只能运行一次。我已经使用boost进程间库shared_memory_object来做到这一点。请参阅下面的代码片段,boost::scoped_ptrsharedMem;try{sharedMem.reset(newshared_memory_object(create_only,"shared_memory",read_write));}catch(...){//executableisalreadyrunningcerr问题是,该方法阻止我的应用程序同时运行多次;但是,假设用户停止程序运行,那么内存将不会被释放,下次用户再次尝试运行程序时,程

c++ - 链接到 Boost 正则表达式库时程序启动期间崩溃

我们的项目(在C++中)需要链接到boostregex,所以我们只需找到正确编译的libboost_regex_1.45.0并告诉g++链接到它。编译成功,我们得到了预期的正确可执行文件。问题是,每次我们尝试运行可执行文件时,它都会在进入main()例程之前崩溃。将生成的core文件附加到gdb,backtrace命令显示在__bultin_strlen期间存在段错误,解析为strlen@@GLBC_2.2.5。由于我们的可执行文件链接到多个动态库,因此利用readelf-s来识别有问题的符号,并将其归结为libboost_regex。然而,引用的符号已经存在于RHEL6系统文件夹/l

c++ - 为 C/C++ 标准库、boost 和第三方库设置单独的 ctags 数据库

我想为/usr/include/中的各种库设置单独的ctags数据库,以便与OmniCppComplete一起使用.我们的想法是能够仅引入目标语言(C或C++)中特定项目所需的库。例如,我想要一个用于标准C库的数据库,一个用于可能被C或C++程序(想到套接字/网络)使用的系统库,一个用于标准C++库/STL/boost,然后是QT或者glib等各种第三方库的其他数据库。然后我可以简单地通过在vim中输入settags+=~/.vim/somelib.tags来拉入一些东西。我假设与C++stdlib和STL相关的所有内容都在/usr/include/c++中,而Boost都在/usr/

c++ - 对 Boost JSON 解析器的调用永远不会返回

我在Linux上运行的基于QT的单线程控制台应用程序使用Boost解析JSON字符串,它正常工作,除非接收到非常大的JSONblock。我有一段大小约为160kb(!)的有效JSON,当我尝试解析它时,对Boost的JSON解析器的调用永远不会返回。我已经离开它相当长的时间了。如果我随后中断使用调试器,我的应用程序将闲置在其消息循环中,就好像什么也没发生一样。该调用不会引发异常。JSON没有什么值得注意的地方,除了它的大尺寸-它格式正确并且完全由ASCII字符组成。执行怎么会简单的“放弃”,回到QT消息循环呢?voidIncomingRequestHandler::OnRequest(

c++ - boost 内存映射文件是否在 Linux 上归零

我正在重新学习C++,我需要使用内存映射文件。我决定使用boost(因为它似乎是可靠的库)。我创建了一个映射到double组的内存映射文件,并写入该数组中的第一个double。磁盘文件的前四个字节包含一些数据,其余部分被清零,这对我来说很好奇,因为如果我在C++中获得指向内存位置的指针,在大多数情况下我必须假设它包含垃圾。我是否可以保证新创建的内存映射文件将被清零(至少在Linux上)?我没有找到任何引用。BOOST_AUTO_TEST_CASE(OpenMMapFile){boost::iostreams::mapped_filefile;boost::iostreams::mapp

c++ - Boost为同一个线程获取多个锁

我有一个需要审查的基本示例(C++)。假设我有一个函数PublicFunc()和另一个函数PrivateFunc()。我想仔细同步它们。但是PrivateFunc有时也可以调用PublicFunc,这意味着我们是从同一个线程调用它的。这会导致阻塞,我想解决它。mutableboost::mutexm;voidPublicFunc(){m.lock();//Hereitblocks,butwhy?//WhatIneedistogetthelockifthisfuncwascalledfromPrivateFunc(),soexactlyfromthesamethread.//But!It

c++ - 找不到 boost 库

这是一个非常基本的问题,我发帖只是因为我已经花了一些时间来研究它。这是我到目前为止所做的:下载并编译boost库:sudo./bootstrap.sh和sudo./bjaminstall这样它就安装到了/usr/local/lib。在我的源代码中,我只添加了:#includeusingboost::asio::ip::tcp我编译它:g++-I/usr/lib/jvm/java-6-openjdk/include-L/usr/local/lib-fPIC-lboost_system-shared-olibagent.soagent.cpp但是,ldd-d./libagent.so给我:

c++ - 这是 boost::filesystem 中的错误吗?为什么 boost::filesystem::path::string() 在 Windows 和 Linux 上没有相同的签名?

我正在尝试使用成员函数string()boost::filesystem::path的vector转换为std::string/。我写了这篇文章,它在Windows上运行良好(MSVC14、2015):std::transform(users.begin(),users.end(),std::back_inserter(usersStrs),std::mem_fn(static_cast(&PathType::string)));现在我转到gcc(6.3,DebianStretch),我的代码给出了链接错误,上面的签名不存在。要修复它,我必须将代码更改为:std::transform(

linux - 在 Linux 中 boost 安装

根据Linux的Boost下载说明http://www.boost.org/doc/libs/1_42_0/more/getting_started/unix-variants.html我应该将Boost库提取到我计算机上的某个目录中。我正在使用Ubuntu、Eclipse和CDT。安装Boost的正确目录是什么?/usr或我的主目录中的某处? 最佳答案 Boost也可以在Ubuntu存储库中使用——例如,sudoapt-getinstalllibboost1.40-dev将为boost安装开发文件。如果您不需要绝对最新的版本(看起