草庐IT

延时分配

全部标签

c++ - 除了与内存分配相关的东西之外,void* 是否必要

除了C++中与内存分配相关的内容之外,void*是否必要?能举个例子吗? 最佳答案 记录内存地址如果你想使用iostreams输出一个指针(例如用于日志记录)然后通过void*是确保operator的唯一途径没有以某种疯狂的方式重载。#includestructfoo{};std::ostream&operator(ptr)测试iostream状态iostreams重载operatorvoid*作为状态检查,以便像if(stream)这样的语法或while(stream)是测试流状态的简便方法。模板元编程您可能想使用void*有时使

c++ - std::copy 用于动态分配的指针

这可能是一个非常新手的问题。我正在处理的类(我们称之为MyClass)包含以下变量intnbins;double*bins;//=newdouble[nbins+i]因为我正在实现一个复制构造函数MyClass(constMyClass&source)我需要复制source.bins。我打算使用algorithm中的std::copy,但我发现的所有示例都展示了如何复制静态数组,如doublebins[]=。..或标准数据结构,如std::vector。我找不到任何示例,其中std::copy用于像double*bins=newdouble[nbins+i]这样的指针。所以,我的问题是

c++ - 如何让 Valgrind 记录所有分配?

即使没有发现内存错误,我也想让Valgrind记录分配。如何才能做到这一点? 最佳答案 您将使用Massif为此(一个valgrind工具)。手册链接很容易理解,但为了将来引用,这里是直接从手册中使用它的方法:valgrind--tool=massifprog这将生成一个文件,您可以使用ms_print对其进行分析.文件名将为massif.out..只需使用ms_print获得不错的输出:ms_printmassif.out.12345您要查找的内容可以在ms_print输出的末尾找到.对于这个示例程序(他们在手册中显示的程序):#

分配值的angularJ在范围内不起作用的范围

我正在AngularJS开发Web应用程序。我有文本框和指令。我的文本框应仅在一定范围内采用值,否则应显示错误消息。在HTML代码下方。Numbernotinrange以下是我的指示。app.directive('rangeNumber',function(){return{require:'ngModel',link:function(scope,elem,attrs,ctrl){if(!ctrl)return;varrange=scope.$eval(attrs.rangeNumber);range=range.split(',').map(Number);ctrl.$parsers.pu

c++ - 当 C++ 线程退出时,内存是否保持分配状态?

我在Linux上使用pthread库。我在线程A中分配一个字符串,然后尝试在线程B中打印该字符串。但是,该字符串只是打印出空字符串(我已验证它在线程A中有效)。注意:该字符串驻留在一个对象内,我怀疑该对象可能正在被清理或重新实例化为空...容器对象没有给我一个段错误或任何东西,只是所有的值都是空的。这是因为线程无法从其他线程访问内存,还是因为线程A停止后内存被取消分配?或者两者都不是;这很可能是我代码中的错误,但我只是想排除这种可能性......更新:原来是内存问题。感谢您的回答,我也有answeredthismyself,如果您同意/不同意,请对我的回答发表评论。

c++ - 栈分配失败,堆分配成功!!可能吗?

我有以下片段ClassSample{Obj_Class1o1;Obj_Class2o2;};但是Obj_Class1和Obj_Class2的大小很大,因此编译器会显示警告“考虑将一些空间移动到堆”。我被要求用Obj_Class1*o1=newObj_Class1();替换Obj_Class1o1但我觉得进行此更改没有用,因为如果堆栈分配失败,堆分配也会失败。我对么?或者进行此更改是否有意义(除了抑制编译器警告)。 最佳答案 栈比堆小是非常典型的。他们使用不同的内存位置。堆栈的大小通常约为1兆字节(您可以更改它,但要小心)并且按线程分

在堆栈上分配对象时的 C++ 继承错误

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyisitanerrortouseanemptysetofbracketstocallaconstructorwithnoarguments?我有小代码示例:#includeusingnamespacestd;classA{public:voidprint(){cout但是,如果我改成下面的那个,如果可行的话,B*b=newB();b->print();为什么在堆栈上分配对象时它不起作用?

c++ - 从函数返回动态分配的数组会导致内存泄漏吗?

我问这个问题是为了消除我对以下程序的困惑。我知道在某些上下文中使用数组会使数组衰减到指向其第一个元素的单个指针。我有一个通过指针返回此数组的函数(此函数是使用new[]创建的)。数组会衰减,导致指针只指向第一个元素吗?这是一个例子:int*foo(){int*t=newint[10];returnt;}intmain(){int*p=foo();}这就是困惑所在。我不知道p是指向第一个元素还是指向整个数组。所以我有以下问题:通过指针返回数组会导致它的衰减(并因此导致内存泄漏)吗?p是否指向数组的第一个元素?如果以上两个为真,在p上使用delete[]会导致未定义的行为吗?我希望这些问题

c++ - boost.pool 是如何实现分配内存的重用呢?

背景我的previousquestion关于boost.pool让我详细研究了boost.pool,现在我有一个补充问题来完成我的理解。序曲Thisreference声明以下关于对象池模式:Theobjectpoolpatternisasoftwarecreationaldesignpatternthatusesasetofinitializedobjectskeptreadytouse,ratherthanallocatinganddestroyingthemondemand.据我所知,boost.pool(简化版)通过主要基于element_type大小的内存分配和管理实现对象池模

c++ - vector 的 vector 是否可以因为其中一个元素被重新分配而被重新分配?

假设我有一个vector的vector:vector>table;我知道如果vector没有足够的容量,它会被重新分配。我想知道如果我这样做是否有可能重新分配vector表:table[i].resize(1000);是否有可能table[i]的重新分配也会重新分配table? 最佳答案 没有。这不会导致在table中重新分配。在table上调用的唯一运算符/函数是[]运算符,它promise恒定时间。如果发生重新分配,这将违反恒定时间promise。之所以可以更改子vector(table[i])的vector大小而不需要在顶级v