草庐IT

memory_block

全部标签

c++ - 不可恢复的 block 作用域错误,C++ 仿函数数组

我试图在编译时创建仿函数数组,如下所示:(完整文件):#includeusingnamespacestd;functioncolorFunctions[]={[](floattElevation,floatpAzimuth)->float{return2.0f;},};intmain(){}这很好用。但是,一旦您尝试在仿函数block内创建一个局部变量,就像这样:functioncolorFunctions[]={[](floattElevation,floatpAzimuth)->float{floatv=2.0f;returnv;},};您收到错误1​​errorC1506:unr

c++ - Memory SPIKE - boost ASIO 异步读取

写了一个只从客户端读取数据的服务器:使用boost::array缓冲区启动服务器,系统监视器显示1MB的使用量。1.)只需执行一个async_read_some并执行一个handleRead,我会在其中再次调用asyncRead函数。voidasyncRead(){m_socket->async_read_some(boost::asio::buffer(m_readBuffer,READ_BLOCK_SIZE),m_strand->wrap(boost::bind(&ConnectionHandler::handleRead,shared_from_this(),boost::asi

c++ - 线程构造的性能成本 : missed optimisations and memory allocation

我们遇到了一种奇怪的现象,其中包含头文件会导致某些内存分配密集型工作负载的性能下降5-10%。这个头文件将一个线程池声明为一个全局变量。该线程池从未在应用程序中以任何容量(还)使用过。也就是说,除了在程序启动时创建这个静态线程池外,应用程序完全是单线程的。一旦标题被移除,性能损失就会消失。从一些研究来看,由于某些编译器优化不再可能,多线程应用程序似乎会导致一些性能损失。每当以任何形式或容量实例化与线程相关的构造时,是否有可能关闭此类优化?或者,由于在执行大量内存分配时性能损失似乎最为明显,编译器是否有可能在编译/链接阶段意识到线程构造已实例化,因此它切换到线程安全内存分配器?这发生在L

c++ - 如何访问和管理 block 存储的数据

我想做什么我需要以block形式存储单元格数据,即*cell_member1[cell0]..cell_member1[cellN]...cell_memberM[cell0]..cell_memberM[cellN]*然后我需要有效地访问这些数据,如果可能的话,使用一个好的语法。如果我可以定义要轻松存储的数据,那就太好了,即通过定义一个具有成员的对象作为我想要存储的数据,并将它传递给一些为我做所有事情的“魔法”。动机:为什么我需要这样做?缓存垃圾处理。在某些内部循环中,仅访问对象的某些成员。将一半缓存行浪费在未使用的内存上不是我的应用程序的选择。我可以在指向某个顺序内存区域的对象中存

c++ - 邪恶的字节 block 重新解释有效的 C++ 吗?

我们先不讨论下面代码的坏处,它不是我的,我完全提前同意你的看法,它不是很漂亮,而是C-ish并且可能非常危险:void*buf=std::malloc(24+sizeof(int[3]));char*name=reinterpret_cast(buf);std::strcpy(name,"somename");int*values=reinterpret_cast(name+24);values[0]=0;values[1]=13;values[2]=42;它的意图很明确;它是一个“字节block”,存储两个不同的数组类型。要访问不在block前面的元素,它将block解释为char*

C++0x : memory ordering

当前C++0xdraft在第29.3.9节和第29.3.10节第1111-1112页中说明,在以下示例中://Thread1r1=y.load(memory_order_relaxed);x.store(1,memory_order_relaxed);//Thread2r2=x.load(memory_order_relaxed);y.store(1,memory_order_relaxed);结果r1=r2=1是可能的,因为每个线程的操作都放宽了并且指向不相关的地址。现在我的问题是关于以下(类似)示例的可能结果://Thread1r1=y.load(memory_order_acqu

c++ - C3859 : Virtual memory range for PCH exceeded

我在编译(编辑:抱歉,我在这里没有说清楚:我实际上是指“重建”)我的混合模式项目时不时(不是每次)收到此错误消息。VisualStudio告诉我“使用‘-Zm114’或更高的命令行选项重新编译”。原则上没问题,我照VS说的做。但是目前,这有两个问题:为什么它不会在我进行重建时每次发生?如果我理解正确,编译器在编译我的项目时内存不足。因此,如果我进行重建,清除所有以前的工作,如果我不做任何更改,下次它不应该也用完内存吗?为了安全起见,我已经在这个项目的所有配置中为Zm(即Zm120)指定了120的值。为什么我会收到带有此较低值的错误消息?还是建议值114只是VS的胡乱猜测?

c++ - 在现代 C++ 中使用 try..catch block 通过模板元编程包装任意函数调用

我想创建一些模板,基本上应该包装它的参数。参数应该是一个任意的函数调用,它通过一些带有前缀和后缀代码的模板元编程魔法被包装。我想像下面这样使用它:autoresult=try_call(some_vector.at(13));和try_call将以某种方式定义,它将try..catchblock包装在some_vector.at(13)周围。像这样:template//sometemplatemetaprogrammingmagicheretry{autovalue=//executetheparameterhere,i.e.some_vector.at(13);returnstd::

c++ - 为什么成员函数尝试 block 处理程序中的 lambda(捕获 'this')不能访问 VC++ 2013 中的私有(private)数据成员?

与thisquestionaboutstaticinitializers不同但可能相关.前两个函数编译良好,最后一个函数在vc++中不编译,但在clang和gcc中编译:classA{protected:std::stringprotected_member="yay";public:voidwithNormalBlock();voidwithFunctionBlock();voidnoLambda();};voidA::withNormalBlock(){try{throwstd::exception();}catch(...){[this](){std::coutinclang(好

C++ 重构 : conditional expansion and block elimination

我正在重构大量代码(主要是C++),以删除一些已永久设置为给定值的临时配置检查。因此,例如,我将有以下代码:#include#include#include...if(value1()){//dosomething}boolb=value2();if(b&&anotherCondition){//domorestuff}if(value3()对value的调用返回bool或int。因为我知道这些调用总是返回的值,所以我做了一些正则表达式替换以将调用扩展到它们的正常值://where://value1()==true//value2()==false//value3()==4//TODO