草庐IT

memories

全部标签

C++ 继承 : does lack of virtual destructor lead to memory leak?

这个问题在这里已经有了答案:Possiblememoryleakwithoutavirtualdestructor?(3个答案)关闭6年前。我对自己经常问自己的一个问题有疑问,是这样的情况:两个类,没有虚析构函数classBase{intmyInt;};classDerived:publicBase{intmyIntDerived;};intmain(){Base*base=newDerived;Derived*derived=newDerived;deletebase;deletederived;}第一个delete导致内存泄漏而第二个delete没问题,这样说对吗?

c++ - 为什么 Visual C++ 2010 提示 'Using uninitialized memory' ?

我有一个函数,它接受一个指向缓冲区的指针,以及该缓冲区的大小(通过指针)。如果缓冲区不够大,它会返回一个错误值并在输出参数中设置所需的长度://FillBufferisdefinedinanothercompilationunit(OBJfile).//Wholeprogramoptimizationisoff.intFillBuffer(__int_bcount_opt(*pcb)char*buffer,size_t*pcb);我这样调用它:size_tcb=12;char*p=(char*)malloc(cb);if(!p)returnENOMEM;intresult;for(;;

c++ - boost iostream : how to turn ifstream into memory mapped file?

我想要的是简单地打开文件作为内存映射文件进行读取-以便将来以更快的速度访问它(例如:我们打开文件读取它结束,等待并一次又一次地读取它)同时我希望该文件可以被其他程序修改,当他们修改它时,我希望我的ifstream也能修改。如何使用boostiostreams(或boostinterprocess)做这样的事情?我们可以只是tallos-嘿,这个文件应该为所有应用程序进行内存映射?所以我尝试这样的代码:#include#include#includeusingnamespaceboost::iostreams;intmain(intargc,char**argv){streamout;t

c++ - 简单代码导致错误读取变量: Cannot access memory at address

我正在尝试使用支持python的gdbMinGW-builds.我遇到了一个错误。这是一个相当简单的代码,在MSVC下调试时它工作正常。D:\CppProject\c1\bin\Debug>gdbc1.exeGNUgdb(GDB)7.6(copyright,license,bugreport,etcomittedhere)ReadingsymbolsfromD:\CppProject\c1\bin\Debug\c1.exe...done.(gdb)l1#include2#include34usingnamespacestd;56intmain()7{8vectorv;9v.push_b

C++ 原子 : would function call act as memory barrier?

我正在阅读这篇文章MemoryOrderingatCompileTime从中说:Infact,themajorityoffunctioncallsactascompilerbarriers,whethertheycontaintheirowncompilerbarrierornot.Thisexcludesinlinefunctions,functionsdeclaredwiththepureattribute,andcaseswherelink-timecodegenerationisused.Otherthanthosecases,acalltoanexternalfunction

c++ - memory_order_seq_cst 如何与非原子操作同步?

如果使用单个原子变量和std::memory_order_seq_cst,是否保证非原子操作不会被重新排序?例如,如果我有std::atomicquux={false};voidfoo(){bar();quux.store(true,std::memory_order_seq_cst);moo();}是bar()保证在调用store之后不会重新排序,并且moo()在调用之前不会重新排序store,只要我使用std::memory_order_seq_cst,至少从另一个线程的角度来看?或者,换句话说,如果从另一个线程运行,以下假设是否有效?if(quux.load(std::memor

c++ - std::atomic::compare_exchange 与两个 memory_order 参数一起使用的真实示例

您能否给出一个真实世界的例子,其中出于某种原因使用了std::atomic::compare_exchange的两个memory_order参数版本(因此一个memory_order参数版本是不够的)? 最佳答案 在许多情况下,compare_exchange上的第二个内存排序参数设置为memory_order_relaxed。在这些情况下,省略它通常并没有错,只是可能效率较低。这里是一个简单的无锁列表/堆栈示例,它需要compare_exchange_weak上的第二个不同的排序参数,以便避免数据竞争。调用push可以并发执行,但

c++ - C/C++ : Bitwise operators on dynamically allocated memory

在C/C++中,是否有一种简单的方法可以将按位运算符(特别是左移/右移)应用于动态分配的内存?例如,假设我这样做了:unsignedchar*bytes=newunsignedchar[3];bytes[0]=1;bytes[1]=1;bytes[2]=1;我想要一种方法来做到这一点:bytes>>=2;(那么“字节”将具有以下值):bytes[0]==0bytes[1]==64bytes[2]==64为什么值应该是这样的:分配后,字节如下所示:[00000001][00000001][00000001]但我希望将字节视为一长串位,如下所示:[000000010000000100000

c++ - 什么是 __asm volatile ("pause"::: "memory");做?

我正在查看具有以下代码结构的开源C++项目:while(true){//Dosomethingworkif(some_condition_becomes_true)break;__asmvolatile("pause":::"memory");}最后一条语句是做什么的?我知道__asm意味着它是一个汇编指令,我发现一些关于pause指令的帖子说线程有效地暗示核心释放资源并给其他线程更多资源(在超线程的上下文中)。但是:::和memory有什么作用呢? 最佳答案 它是_mm_pause()和一个编译内存屏障,包装在一个GNUCExte

c++ - x86_64 和 ARM 上的原子 CAS 操作是否始终使用 std::memory_order_seq_cst?

作为AnthonyWilliamssaid:some_atomic.load(std::memory_order_acquire)doesjustdropthroughtoasimpleloadinstruction,andsome_atomic.store(std::memory_order_release)dropsthroughtoasimplestoreinstruction.众所周知,在x86上,操作load()和store()内存屏障memory_order_consume,memory_order_acquire,memory_order_release,memory_o