草庐IT

keygen_new

全部标签

c++ - 内存碎片会减慢 New/Malloc 的速度吗?

短背景:我正在开发一个应该运行数月并使用动态分配的系统。问题:我听说内存碎片会减慢new和malloc运算符的速度,因为它们需要在我留下的“漏洞”之一中“找到”一个位置在内存中,而不是简单地在堆中“前进”。我读过以下问题:Whatismemoryfragmentation?但是没有一个答案提到任何关于性能的事情,只是分配大内存块失败。那么内存碎片是不是让new需要更多的时间来分配内存呢?如果是,增加多少?我怎么知道new是否正在“艰难”地寻找堆上的内存?我试图找到GCC用来在内存中找到要在内部分配的“洞”的数据结构/算法是什么。但找不到任何血统解释。 最佳答

c++ - STL 分配器和运算符 new[]

是否有使用operatornew[]的STL实现?作为分配器?在我的编译器上,生成Foo::operatornew[]private并没有阻止我创建vector...这种行为有任何保证吗? 最佳答案 C++标准,第20.4.1.1节。默认分配器allocate()函数使用全局运算符new:pointerallocate(size_typen,allocator::const_pointerhint=0);3Notes:Uses::operatornew(size_t)(18.4.1).

c++ - 将 raw operator new、placement new 和 standard delete 结合起来是否合法?

伙计们!出于好奇——以下代码可能不合法,对吗?T*p=::operatornew(sizeof(T));//allocatememoryforaTnew(p)T;//constructaTintotheallocatedmemorydeletep;//deletetheobjectusingthestandarddeleteoperator 最佳答案 没有。您只能删除从新返回的内容-没有异常(exception)。 关于c++-将rawoperatornew、placementnew和s

c++ - 防止继承 operator new 和 delete

(我确实扫描了,但找不到任何类似的东西,如果有欺骗请关闭)。有没有办法防止这两个运算符被继承?例如:structfoo{staticvoid*operatornew(std::size_t){//special}staticvoidoperatordelete(void*p,std::size_t){//special}};structbar:publicfoo{};现在bar将继承这两个运算符-在这种微不足道的情况下,没什么大不了的,如果foo和bar中有数据成员,就会出现问题(在我的情况下更糟,因为foo的分配需要与bar不同!)现在避免这种情况的方法是在bar,我也会实现操作符。

c++ - 传入 A::operator new() 的大小是否总是等于 sizeof(A)?

structAfinal{inta;void*operatornew(size_tsize){////Issizealwaysequaltosizeof(A)here?//return::operatornew(size);}voidoperatordelete(void*ptr){::operatordelete(ptr);}};intmain(){for(autoi=0;i我的问题也嵌入了代码中。C++标准是否保证传入A::operatornew()的大小始终相同?更新:在这里,只考虑A是最终类。 最佳答案 引自C++11标准,

c++ - 如果 new_size 不大于旧的,C++ 标准是否保证 std::string::resize(new_size) 不会导致分配?

这个问题在这里已经有了答案:Doesthestandardguarantee,thatstd::string::resizewillnotdoreallocatememory,ifthenewsizeislessthanorequaltoastheoldone?(1个回答)关闭3年前。#include#includeintmain(){autos="hello"s;autop=&s[0];s.resize(3);assert('h'==*p);//alwaysok?}如果new_size不大于旧的,C++标准是否保证std::string::resize(new_size)不会导致分配

C++——应该使用 "new Car"还是 "new Car()"?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Dotheparenthesesafterthetypenamemakeadifferencewithnew?大家好,classCar{public:Car():m_iPrice(0){}Car(intiPrice):m_iPrice(iPrice){}private:intm_iPrice;};int_tmain(intargc,_TCHAR*argv[]){Carcar1;//Line1Carcar2();//Line2,thisstatementdeclaresafunctioninstead.Car*

c++ - 释放 : A** mat = new A*[2]; 的内存

我定义了:A**mat=newA*[2];但是我怎样才能删除它呢?使用delete[]mat;或delete[]*mat;? 最佳答案 它是delete[]mat;仅当您不进行额外分配时。但是,如果您在数组数组中分配了数组,则还需要删除它们:A**mat=newA*[2];for(inti=0;i!=2;i++){mat[i]=newA[5*(i+3)];}...for(inti=0;i!=2;i++){delete[]mat[i];}delete[]mat; 关于c++-释放:A**m

简单易行的matplotlib中英文混排(设置中文为宋体,英文为times new roman)

先看效果:普通混排支持tex文本的混排:以下是代码:普通混排importmatplotlib.pyplotaspltfrommatplotlib.font_managerimportFontProperties#设置字体plt.rcParams['font.family']=['SimSun','TimesNewRoman']#设置字体族,中文为SimSun,英文为TimesNewRomanplt.rcParams['mathtext.fontset']='stix'#设置数学公式字体为stix#绘制图像plt.plot([1,2,3,4,5],[1,4,9,16,25])plt.title(

c++ - 如何使用 placement new 确定对象是否已放置

使用placementnew语法,我应该能够做这样的事情:char*buffer=newchar[sizeof(MyClass)];//pre-allocatedbufferMyClass*my_class=new(buffer)MyClass;//putdaclassthere现在假设我只做第一行,而不做第二行。有没有一种方法可以在代码中确定是否已正确分配缓冲区,但那里尚未实例化MyClass类型的对象? 最佳答案 该语言没有提供任何内置机制来提供该信息,至少我所知道的没有。您必须添加自己的簿记代码来跟踪此类信息。