草庐IT

malloc_ptr_t

全部标签

c++ - 为什么 std::shared_ptr 使用原子 cpu 操作

我无法理解为什么shared_ptr使用原子cpu指令...我无法找出原因,因为它不是线程安全的。有人可以解释一下吗。如果你想知道我是怎么知道它使用原子结构的:有一段来自C++的剪辑以及Herb和Andrei谈论它的地方,但他们从未提及为什么会这样。 最佳答案 shared_ptr的任何实例都是多线程安全的。它指向的数据不是多线程安全的。参见this.如果正确应用原子指令(通过竞争线程访问以相同顺序完成保护)是实现线程安全的一种方法。另一种方法是使用互斥体。查看BOOST的类似问题:Isboostshared_ptrxxxthrea

时间:2019-05-06 标签:c++unique_ptr参数传递

假设我有以下代码:classB{/**/};classA{vectorvb;public:voidadd(B*b){vb.push_back(b);}};intmain(){Aa;B*b(newB());a.add(b);}假设在这种情况下,所有原始指针B*可以通过unique_ptr处理.令人惊讶的是,我无法找到如何使用unique_ptr转换此代码。.经过几次尝试,我想出了以下代码,它可以编译:classA{vector>vb;public:voidadd(unique_ptrb){vb.push_back(move(b));}};intmain(){Aa;unique_ptrb(

c++ - std::unique_ptr 的 clang 错误

我有一个名为IList的基础对象。然后我有VectorList,它继承了IList。然后我有这样的功能:std::unique_ptrfactory(){autovlist=std::make_unique();returnvlist;}这在gcc下编译没有问题,但是clang给出以下错误:test_file.cc:26:9:error:noviableconversionfrom'unique_ptr>'to'unique_ptr>'returnvlist;如何正确处理此类错误? 最佳答案 看起来(您的)Clang在这方面仍然遵循

c++ - shared_ptr 现实生活中的用例

shared_ptr将在我们希望拥有一个动态分配项目的多个所有者的情况下使用。问题是,我无法想象我们需要多个所有者的任何场景。我能想到的每个用例都可以用unique_ptr解决。有人可以提供一个现实生活中的用例示例,其中包含需要shared_ptr的代码(这里需要,我的意思是作为智能指针的最佳选择)?我所说的“现实生活”是指一些实用的用例,而不是过于抽象和虚构的东西。 最佳答案 在我们的模拟器产品中,我们使用一个框架在模拟组件(称为端点)之间传递消息。这些端点可以驻留在进程内的多个线程上,甚至可以驻留在模拟集群中的多台机器上,消息通

c++ - 为什么 new/malloc 在 Win x64 上失败,尽管有足够的空闲 RAM?

我有一个强递归函数,它使用new(递归到malloc)为每个函数实例在本地创建一个(非常小的)std::multimap/calloc在标准库中)。尽管我在WindowsXPx64上使用native64位应用程序,但经过数百次递归后,新的失败了。机器有10GBRAM,应用程序只使用大约1GB。没有其他大型应用程序正在运行。这发生在启动程序并启动递归函数几分钟后。此时递归函数已被调用约150.000次,可能是最大值。数百个递归。出现的问题不是堆栈溢出。我正在使用VisualStudio2005和dinkumwareSTL。故障发生在发布版本中。编辑:好的,这是一些代码。我现在重新排列代码

c++ - 如何使用 ifdef 检测是否支持 Windows DWORD_PTR 类型?

有somenewintegertypes在WindowsAPI中支持Win64。他们并不总是得到支持;例如theyaren'tpresentinMSVC6.我怎样才能写一个#if是否支持这些类型的检测条件?(我的代码需要在许多不同版本的MicrosoftVisualC++下编译,包括MSVC6。因此我需要提供我自己对这些类型的定义,并带有#if以在较新的编译器中禁用它们)。(对于搜索者,完整的类型列表是:DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR) 最佳答案 宏MSC_VER是在[12

c++ - 如何将 unique_ptr 与 operator new 一起使用

我正在分配一block具有输入大小的临时内存,我想使用unique_ptr跟踪适当的生命周期,而不必明确担心自己释放它。这是我想出的:{std::unique_ptrsp;sp.reset(reinterpret_cast(operatornew(100)));}我不得不使用BYTE因为MSVC不会用std::unique_ptr编译.根据我的测试,new和delete运算符按预期调用。由于这是一种不常见的用法(即显式使用operatornew),我想检查一下这没有什么问题吗?是否有更好/更清洁的替代品? 最佳答案 假设您想使用ne

c++ - 在许多 malloc/free 小块内存之后 malloc 大块内存失败

这是代码。首先我尝试malloc并释放一个大块内存,然后我malloc很多小块内存直到内存用完,然后我释放所有那些小块。之后,我尝试malloc一个大块内存。#include#includeintmain(intargc,char**argv){staticconstintK=1024;staticconstintM=1024*K;staticconstintG=1024*M;staticconstintBIG_MALLOC_SIZE=1*G;staticconstintSMALL_MALLOC_SIZE=3*K;staticconstintSMALL_MALLOC_TIMES=1*M

c++ - 在 free/malloc、外部内存 Hook 上花费了大量时间?

这部分与编程/调试相关,部分与外部操作系统相关(super用户候选人?),但我还是将其发布在这里,因为如果有人应该知道答案,它就在这里。我正在开发一个程序,突然,一个新的构建(没有重大变化)导致一切都停止了。我对它进行了剖析以查看花费的时间,但%分布是正常的-一切只是花费了更长的时间。使用VerySleepy研究调用堆栈时,我注意到free/malloc/delete/realloc占了95%以上的运行时间。怀疑堆损坏,我回滚了所有更改,但没有任何更改。使用MSVC的探查器,我深入挖掘了调用堆栈,超出了malloc/realloc并且令人惊讶地结束于一个名为Acxtrnal.dll的外

c++ - 该标准是否要求自动存储中的对象对任何类型都具有正确的对齐方式(例如,如 malloc 那样)?

我很好奇是否需要在堆栈上分配缓冲区以正确对齐任何类型,类似于malloc的工作方式,或者我是否会被迫使用类似的东西std::aligned_storage.考虑以下代码块:typedefenum_KEY_VALUE_INFORMATION_CLASS{KeyValueBasicInformation=0,//Others}KEY_VALUE_INFORMATION_CLASS;typedefstruct_KEY_VALUE_BASIC_INFORMATION{ULONGTitleIndex;ULONGType;ULONGNameLength;WCHARName[1];}KEY_VALU