草庐IT

memory-reallocation

全部标签

c++ - Realloc-in 标准分配器

用于标准分配器接口(interface),例如std::vector,是否支持重新分配?我有一个相当具体的用例,其中能够realloc直接比分配、移动和释放效率更高。编辑:对不起-我绝对无意调用实际realloc,我的意思是具有这些语义的函数。实际上,我在后台分配了一个堆栈,如果我从堆栈分配更多,那么我就无法释放它下面的内存,这完全是浪费,因为无论如何都不需要再次分配,因为有很多可用的连续可用空间。因此,如果我可以被要求在一个步骤中重新分配,那么我可以避免首先分配一些东西并浪费一些内存,然后移动vector的所有内容。. 最佳答案

c++ - 标准 C++11 是否保证 memory_order_seq_cst 防止 StoreLoad 围绕原子进行非原子重新排序?

标准C++11是否保证memory_order_seq_cst防止StoreLoad围绕非原子内存访问的原子操作重新排序?众所周知,有6个std::memory_orders在C++11中,其指定多么规律,非原子内存访问将围绕原子操作进行排序-工作草案,C++编程语言标准2016-07-12:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf§29.3Orderandconsistency§29.3/1Theenumerationmemory_orderspecifiesthedetailedregular

c++ - 为什么我在检查核心转储时进入 gdb "Cannot access memory at address 0x..."?

我在分析核心转储时尝试打印以下行时收到此消息。(gdb)p/x*($esi)Cannotaccessmemoryataddress0xe6d3a030我提到%esi(0xe6d3a030)指向的地址应该指向一些有效的分配数据。(当我自己运行这个程序并按照相同的指令中断时,这个打印有一些有意义的信息)造成这种情况的可能原因是什么?我是否遗漏了核心转储中的一些信息?如果是,我缺少什么信息?核心转储不应该包含所有已分配内存的快照吗?编辑:当我在加载核心转储时在gdb“维护信息部分”命令中使用时,我得到下面显示的信息。我可以看到地址0xe6d3a030在0xe6d00000->0xe6dfb0

c++ - "std::bad_alloc": am I using too much memory?

消息:terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():std::bad_alloc我查看了gdb回溯,这是我自己实现的最低级别的方法:/**getanarrayofvec3s,whichwillbeusedforrenderingtheimage*/vec3*MarchingCubes::getVertexNormalArray(){//UsedthesamearraysizetechniqueasgetVertexArray:wewantindicestomatchupvec3*array=newvec3[

c++ - "live C++ objects that live in memory mapped files"?

因此,我在Gamasutra阅读了JohnCarmack的采访,其中他谈到了他所谓的“存在于内存映射文件中的实时C++对象”。以下是一些引用:JC:Yeah.AndIactuallygetmultiplebenefitsoutofitinthat...ThelastiOSRageproject,weshippedwithsomenewtechnologythat'susingsomecleverstufftomakeliveC++objectsthatliveinmemorymappedfiles,backedbytheflashfilesystemonhere,whichishowI

c++ - Python ctypes : how to free memory? 获取无效指针错误

我想从带有ctypes的C/C++库中获取一些字符串到python中。我的代码如下所示:lib中的代码:constchar*get(structsomething*x){[...]//bufisastringstreamreturnstrdup(buf.str().c_str());}voidfreeme(char*ptr){free(ptr);}Python代码:fillprototype(lib.get,c_char_p,POINTER(some_model)])fillprototype(lib.freeme,None,[c_char_p])//whatiwanttodohere

c++ - `memory_resource` 的用途和用途是什么?

标准C++17包含一个新的命名空间pmr,其中包括一组以memory_resource的名称分组的类。在网上搜了一下,发现很少有关于它的低俗信息,直接结果就是这个问题:pmr,尤其是pmr::memory_resource背后的主要思想是什么?把问题详细一点,我脑子里的一些问号是:它带来了什么新的东西,或者它解决了哪些限制?与allocator有什么区别?多态是否意味着可以选择运行时提供给容器构造函数的allocator?(例如用于测试目的)它对实现内存池或其他内存管理方案有帮助吗?上下文:为了创建memorypool分配器,我找到了有关此命名空间的信息。阅读像pool_options

c++ - MSVC : tell the optimizer you clobber memory? 中微基准的优化障碍

ChandlerCarruth在他的CppCon2015talk中介绍了两个函数。可以用来对优化器进行一些细粒度的抑制。它们对于编写优化器不会简单地陷入无意义的微基准非常有用。voidclobber(){asmvolatile("":::"memory");}voidescape(void*p){asmvolatile(""::"g"(p):"memory");}这些使用内联汇编语句来改变优化器的假设。clobber中的汇编语句声明其中的汇编代码可以读写内存中的任何位置。实际的汇编代码是空的,但优化器不会查看它,因为它是asmvolatile。当我们告诉它代码可以在内存中的任何地方读写

c++ - 使用 C 字符串会给出警告 : "Address of stack memory associated with local variable returned"

我不是C程序员,所以我对C-string不是很熟悉,但是现在我必须使用C库,所以这里是我的代码的简化版本来演示我的问题:char**ReadLineImpl::my_completion(){char*matches[1];matches[0]="add";returnmatches;}我收到此警告:Warning-addressofstackmemoryassociatedwithlocalvariable'matches'returned而且我的程序似乎不能正常工作(可能是因为上面提到的警告)。警告意味着什么?会不会造成什么问题? 最佳答案

c++ - 什么是 realloc() 的 C++ 版本,用于分配新缓冲区并从旧缓冲区复制内容?

在C中我们使用malloc(),free(),但在C++中你使用new,delete,但在C中我们也有realloc,它将分配新数据block并复制旧数据(常见的最小值),然后释放旧数据block。那么它的C++版本是什么?我当然可以自己写,但是有内置的东西吗?main(){inti;char*x=malloc(3);x[0]=10;x[1]=20;x[2]=30;realloc(x,4);x[3]=40;for(i=0;i 最佳答案 在C++中没有与realloc等效的new/delete。来自BjarneStroustrup's