草庐IT

malloc_size

全部标签

c++ - 将 malloc 更改为新的运算符

我正在将路径规划代码从C更改为C++。代码动态分配map中的状态。new和malloc的区别我不是很清楚。以下代码片段出现错误。typedefstructcell{intx,y;structcell*n[5];}cell_t;typedefstructpq{cell_t**heap;intlen,cap;}pq_t;//forCversionfunc(pq_t*pq,50){pq->heap=malloc(sizeof(cell)*50);pq->len=0;pq->cap=0;}//forC++versionfunc(pq_t*pq,50){pq->heap=(cell_t*)::o

c++ - Win32 并在 WindowProcedure 外捕获 WM_SIZE 消息

我有一个处理消息的函数,我在WindowProcedure之外捕获某些消息以触发所需的行为。问题是,虽然其他消息似乎正在按需要工作,但出于某种原因我无法捕获WM_SIZE消息。WM_SIZE出现在WindowProcedure中,但我找不到我的函数看不到它的原因。我读取当前HWND的方法有问题吗?目前的功能是://OSMESSAGESintOSMessages(void){MSGmsg;HWNDactwnd=GetActiveWindow();if(PeekMessage(&msg,actwnd,0,0,PM_REMOVE)){if(msg.message==WM_QUIT){prin

c++ - 是否允许 std::vector::size() 要求非平凡的计算?什么时候有意义?

我正在审查一段代码,看到一个类,其中std::vector存储为成员变量,并且该std::vector的大小存储为单独的成员变量。std::vector及其大小的“存储拷贝”在包含对象的生命周期内永远不会改变,评论说大小是单独存储的“为了方便和情况实现每次都会计算大小”。我的第一react是“WT*?提取std::vector的大小不应该总是微不足道的吗?”现在我仔细阅读了C++标准的23.2.4,看不到任何说明是否首先允许此类实现的内容,我无法想象为什么有必要实现std::vector以其当前大小需要非平凡计算的方式。这样的实现是否允许std::vector::size()需要一些重

c++ - 收缩 std::vector 's size to fit its actual data to save memory usage? vec.swap() doesn' t 在 MSVC 中工作吗?

实际上我的程序中有数百万个vector对象。默认情况下,对于每个vector,系统将分配比实际需要更多的空间,因为这些vector在完成加载后是只读的。所以我想缩小自己的容量来节省内存。一种典型的方法是使用vector.swap()方法,如thisquestion中所述:std::vectortmp(v);//copyelementsintoatemporaryvectorv.swap(tmp);//swapinternalvectordata我试过这段代码,但发现.swap()操作实际上并没有减少内存成本。(我查看了任务管理器中的PrivateWorkingSetsize来获取进程的

c++ - OpenGL 帧率 : connection with the size of the window

我当时正在追踪并消除C++/OpenGL/GLUT代码中那些低效且缓慢的部分,在这样做的过程中,我观察了我的每秒帧数计数器,以了解我是否真的取得了进展。我注意到,如果我最大化窗口,我的帧速率会从大约120下降到60。进一步的实验表明这是一个线性的事情,我可以通过改变窗口的大小来改变帧率。这是否意味着我的瓶颈在GPU渲染中?现在的GPU肯定已经足够强大了,不会注意到300x300和1920x1080之间的区别?还是我对我的显卡要求太高了?另一种情况是我的代码中存在一些错误,导致系统在较大的渲染时速度变慢。我要问的是:在更改窗口大小时预期帧速率减半是否合理,还是有什么非常不对劲的地方?

c++ - 为什么我不能像使用 std::string::size_type 那样使用 QList::size_type? (模板参数错误)

在我的for循环中声明迭代器时研究无符号整数与有符号整数比较警告时,Ireadthis:Wheneverpossible,usetheexacttypeyouwillbecomparingagainst(forexample,usestd::string::size_typewhencomparingwithastd::string'slength).我有一个QList我想迭代,使用上面的方法声明迭代器:for(QList::size_typei=0;i它给了我一个编译器错误:error:'templateclassQList'usedwithouttemplateparameters

c++ - vector 、Size_type 和封装

我有一个类,它有一个类型为vector的私有(private)数据成员.该类有两个实际使用vector::size_type的公共(public)方法:返回vector中元素个数的方法方法通过索引返回vector中的元素我可以将以下typedef添加到类的公共(public)部分:typedefvector::size_typeSIZE_t;但是恕我直言,它暴露了太多关于类实现的细节。另一种方法是使用size_t.你怎么看? 最佳答案 我会在类里面使用typedef。原因是对于std::vector,size类型是std::size

c++ - 不使用 malloc 是否有可能造成内存泄漏?

本题如题:是否可以在不使用任何内核特定方法(如malloc、new等)的情况下产生内存泄漏?如果我将在一个包含很多元素的函数中创建一个链接列表,然后我将退出该函数而不清理列表,该怎么办?该列表将在不使用任何malloc调用的情况下创建,即structlist_head{structlist_head*next,*prev;}能保证退出这个函数后所有资源都被释放吗?所以我可以自由执行一百万次而不会泄露任何内容?主题:如果您不使用任何特定的malloc或new调用,您将不会发生堆内存泄漏。绝不。那正确吗? 最佳答案 泄漏总是与资源相关联

c++ - 如果我将 free 与 new 一起使用或将 delete 与 malloc 一起使用,结果会怎样?

是编译错误还是运行时错误?下面的代码可以编译!classBase{voidg();voidh();};intmain(){Base*p=newBase();free(p);return0;}但是,如果我这样声明类Base,它就不能用虚函数编译了classBase{virtualvoidg();voidh();};无论函数是否为虚函数,下面的代码都可以一直编译。classBase{voidg();voidh();};intmain(){Base*p=(Base*)malloc(sizeof(Base));deletep;return0;} 最佳答案

对象指针的 C++ vector - max_size()

我有一个类苹果classapples{private:doublex;doubley;doublez;public://somemethods};我想将指向apples对象的指针存储在一个vector中。我这样做是为了在任何文件中创建任何对象并在任何文件中使用任何对象。我使用以下代码来确定我可以存储在该vector中的最大指针数int_tmain(intargc,_TCHAR*argv[]){vectormyvector;cout它给了我:1073741823现在,我的问题是我真的可以在该vector中存储1073741823个指针吗,或者这是vector的内存限制(即10737418