草庐IT

c++ - 从 std::heap 中间移除一个元素

我正在使用优先级队列作为调度程序,但有一个额外的要求。我需要能够取消预定的项目。这相当于从优先级队列的中间移除一个项目。我不能使用std::priority_queue因为对除top之外的任何元素的访问是protected。我正在尝试使用algorithm的堆函数。但我仍然缺少我需要的那block。当我从堆中间删除一个元素时,我希望它能够有效地重建自己。C++提供了这些堆函数:std::make_heapO(3n)std::push_heapO(lg(n))std::pop_heapO(2lg(n))我想要一个像std::repair_heap这样的新函数,带有一个big-O3n。我会

c++ - 有 C++ MinMax Heap 实现吗?

我正在寻找类似STL中的算法(push_heap、pop_heap、make_heap),除了能够同时弹出有效的最小值和最大值。AKA双端优先级队列。如所述here.双端优先级队列的任何干净实现也可以作为替代方案,但是这个问题主要是关于MinMaxHeap实现。我的google-fu没有结果,但肯定存在吧? 最佳答案 您是否有不能使用std::set的原因?听起来像这样,加上一些包装器来访问和删除set::begin()和--set::end()将解决问题。我想很难找到通常比set的默认实现更快地执行MinMaxHeap的东西。

c++ - RAII 什么时候比 GC 更有优势?

考虑这个在C++中演示RAII的简单类(从我的脑海中):classX{public:X(){fp=fopen("whatever","r");if(fp==NULL)throwsome_exception();}~X(){if(fclose(fp)!=0){//Anerror.Nowwhat?}}private:FILE*fp;X(Xconst&)=delete;X(X&&)=delete;X&operator=(Xconst&)=delete;X&operator=(X&&)=delete;}我不能在析构函数中抛出异常。我有一个错误,但没有办法报告它。这个例子非常通用:我不仅可以使用

c# - GC 与 C# 和 C++ 在同一解决方案中

我有一个由多个C#项目组成的解决方案。它是用C#编写的,以便快速运行。垃圾收集开始成为一个问题——我们发现我们希望避免大约100毫秒的延迟。一个想法是用C++重新编写它,一个项目一个项目。但是如果将C#与非托管C++结合起来,C++项目中的线程是否也会被垃圾回收卡住?更新感谢您的回复。事实上,这是一个100毫秒可能很重要的应用程序。用C#构建它可能是一个糟糕的决定,但它必须在当时快速启动并运行。现在,我们正在使用Windows的MultimediaTimers每5毫秒触发一次事件。我们确实看到了大约100多毫秒的间隔,并且我们通过检查GC计数器确认这些间隔总是在收集期间发生。优化开启;

c++ - C++ 有垃圾收集器(GC)吗?

我目前正在阅读一篇未发表的硕士论文报告,我将提供反馈。在报告中,他们提到了原生C++和托管C++下的垃圾收集器。我以为C++没有任何标准的GC,我是对还是错?(他们没有提到Boehm-Demers-Weiser。)他们在某些条件下无法正常工作。他们在一个线程中创建对象,然后从另一个线程中删除指针。 最佳答案 NativeC++默认没有这样的东西(最接近的东西是智能指针,但这仍然是完全不同的东西),但这并不妨碍你编写自己的垃圾收集解决方案(或使用thirdpartysolution)。托管C++(及其后续C++/CLI)当然对托管资源

c++ - 警告 C4316 : object allocated on the heap may not be aligned 16

重要信息:开发操作系统:Windows8.164位目标操作系统:Windows8.164位IDE:VisualStudio2013专业版语言:C++问题:通过IDE编译我的静态库项目时收到以下警告:warningC4316:...:objectallocatedontheheapmaynotbealigned16我可以简单地忽略此警告...但我假设它的存在是有原因的,并且希望至少了解它的含义以及它对future可能产生的影响。我认为这行代码与问题有关,在我的Win32窗口包装类中调用:m_direct3D=newDirect3D(this);m_direct3D是一个指向我的Direc

node.js - nodejs v8内存gc分配失败

我正在尝试使用无操作服务器来分析nodejsv8内存。我使用node-memwatch来获取堆差异。我在连接之前和连接断开之后收集堆信息。我使用了Node内存监视。我从客户端尝试了200个并发连接。这是连接断开后的gc跟踪。谁能帮我理解:1.为什么内存在增加?连接断开后,服务器绝对什么都不做。它不应该假设总是随着垃圾被收集而丢弃吗?2.那些分配失败是什么?我如何真正解释这里的痕迹?15802ms:Mark-sweep8.9(45.0)->8.1(45.0)MB,58ms[allocationfailure][GCinoldspaceforcedbyflags].16144ms:Mark

JVM的三种常见GC:Minor GC、Major GC与Full GC

文章目录JVM的GCJVMGC的种类GC的触发机制年轻代GC(MinorGC)触发机制老年代GC(MajorGC/FullGC)触发机制FullGC触发机制为什么需要把Java堆分代?扩展:分代回收机制的三个假说JVM的GCGC:垃圾回收GC英文全称为GarbageCollection,即垃圾回收。Java中的GC就是对内存的GC。Java的内存管理实际上就是对象的管理,其中包括对象的分配和释放。Java对象的分配,程序员可以通过new关键字,Class的new-Instance方法等来显示的分配;而对象的释放,程序员不能实时的进行释放,这就需要GC来完成。JVMGC的种类JVM常见的GC包括

java - GC 花了三个小时来降低 1.2GB 的堆,可能是什么原因?

在我们的其中一台服务器上,垃圾收集花了将近三个小时来尝试(成功地)降低1.2GB的堆内存。从1.4GB到200MB。在此期间CPU使用率很高,几乎80-100%。可能是什么原因?我们有4台具有相同配置(JVM设置、服务器配置、硬件、网络)的此类服务器,假设没有人对其进行任何更改,那么特定服务器运行3小时GC的原因可能是什么。所有其他服务器每次GCActivity只需要5到10分钟。附上一张来自HPBAC的图表,供您引用。显示我认为GC启动的时间,以及GC停止的时间。(正如Stephen指出的更确凿的发现)当服务器管理员回复我时提供这些信息:您所使用的JVM的确切版本使用。(标准Java

java - 如何最小化 GC_FOR_ALLOC 的出现?

我的应用程序导致这些可怕的GC_FOR_ALLOC在特定位置(方法)多次发生:12-2922:20:30.229:D/dalvikvm(10592):GC_FOR_ALLOCfreed1105K,14%free10933K/12615K,paused33ms,total34ms12-2922:20:30.260:D/dalvikvm(10592):GC_FOR_ALLOCfreed337K,13%free11055K/12615K,paused25ms,total26ms12-2922:20:30.288:D/dalvikvm(10592):GC_FOR_ALLOCfreed278K,