草庐IT

memory-overcommitment

全部标签

c++ - memory_order_relaxed 如何在智能指针中增加原子引用计数?

考虑以下摘自HerbSutter关于原子的演讲的代码片段:smart_ptr类包含一个名为control_block_ptr的pimpl对象,其中包含引用计数refs。//ThreadA://smart_ptrcopyctorsmart_ptr(constsmart_ptr&other){...control_block_ptr=other->control_block_ptr;control_block_ptr->refs.fetch_add(1,memory_order_relaxed);...}//ThreadD://smart_ptrdestructor~smart_ptr()

C++ : about memory management

我对C++有点陌生,到目前为止,我一直在使用Obj-C和Java进行编程。说,我有课:classPerson{private:Wife*current_wife;//.....};所以obv我需要实现一个setter方法来更改Wife实例变量。像这样:Person::SetCurrentWife(Wife*new_wife){current_wife=new_wife;}那将是一个肤浅的拷贝。所以在主循环的某个地方或我称之为:Person*some_person=newPerson();...Wife*wife=newWife();some_person->SetCurrentWife

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而且我的程序似乎不能正常工作(可能是因为上面提到的警告)。警告意味着什么?会不会造成什么问题? 最佳答案