草庐IT

guard-malloc

全部标签

c++ - 将 std::lock_guard 与 try_lock 一起使用

有没有办法告诉std::lock_guard在获取互斥锁时调用try_lock而不是lock?我能想到的唯一方法是使用std::adopt_lock:if(!_mutex.try_lock()){//Handlefailureandreturnfromthefunction}std::lock_guardlock(_mutex,std::adopt_lock);是否有针对我的问题的内置解决方案,而不是显式获取锁,然后让lock_guard负责释放它? 最佳答案 lock_guard的一个基本设计不变性是它始终持有锁。这最大限度地减少

c++ - 是否可以将 C++ 智能指针与 C 的 malloc 一起使用?

我的一些代码仍然使用malloc而不是new。原因是我害怕使用new因为它会抛出异常,而不是返回NULL,我可以轻松检查它。将每个对new的调用包装在try{}catch(){}中也看起来不太好。而当使用malloc我可以只做if(!new_mem){/*handleerror*/}.因此我有一个问题。我可以将智能指针与malloc一起使用吗?类似:SmartPointersmarty=malloc(sizeof(Type));类似的东西。这可能吗?谢谢,博达·赛多。 最佳答案 如果您使用shared_ptr或unique_ptr,

android - Android Logcat 中的 GC_FOR_MALLOC、GC_EXPLICIT 和其他 GC_* 是什么意思?

如果您查看Android日志,您可能会看到很多此类内容。它们是什么意思,知道这些可能有助于我们更好地分配内存。例子:28470dalvikvmDGC_FOR_MALLOCfreed665objects/239992bytesin71ms28470dalvikvmDGC_FOR_MALLOCfreed673objects/240288bytesin87ms21940dalvikvmDGC_EXPLICITfreed4802objects/185320bytesin78ms28470dalvikvmDGC_FOR_MALLOCfreed666objects/240536bytesin63m

c++ - 为什么 Malloc() 关心边界对齐?

我听说malloc()根据分配的类型对齐内存。例如,来自UnderstandingandUsingCPointers一书:Thememoryallocatedwillbealignedaccordingtothepointer'sdatatype.Foreexample,afour-byteintegerwouldbeallocatedonanaddressboundaryevenlydivisiblebyfour.如果我跟随,这意味着int*integer=malloc(sizeof(int));将分配在可被四整除的地址边界上。即使没有在malloc上强制转换(int*)。我在一个聊

c++ - 包含 malloc 声明的头文件的名称是什么?

包含C和C++中malloc()函数声明的头文件的名称是什么? 最佳答案 它在stdlib.h(C)和cstdlib(C++)中。一般来说,对于此类问题,只需尝试在google上查找:“c++function”。大多数情况下,对我来说,第一次点击会指向cplusplus.com,其中包含对标准内容的完整引用。 关于c++-包含malloc声明的头文件的名称是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - malloc() 和 malloc_consolidate() 中的段错误

当我查看gdb中的回溯时,我的应用程序有时会出现段错误,主要出现在malloc()和malloc_consolidate()中。我确认机器有足够的可用内存,它甚至没有开始交换。我检查了ulimits的数据段和最大内存大小,两者都设置为“无限制”。我还在valgrind下运行了应用程序,没有发现任何内存错误。现在我不知道还有什么可能导致这些段错误。有什么想法吗?更新:由于我没有找到任何使用valgrind(或ptrcheck)的东西,可能是另一个应用程序正在破坏libc的内存结构,还是每个进程都有一个单独的结构? 最佳答案 来自htt

c++ - 在额外范围内包含 std::lock_guard

将std::lock_guard放在额外的范围内以使锁定期尽可能短是否有意义?伪代码://allusedvariablesbesidethelock_guardarecreatedandinitializedsomewhereelse...//dosomething{//opennewscopestd::lock_guardlock(mut);shared_var=newValue;}//closethescope...//dosomeotherstuff(thatmighttakelonger)除了锁定时间短,还有其他优势吗?可能有什么负面影响? 最佳答案

c++ - 是否有 std::lock_guard<std::mutex> lock(m) 的简写?

正是问题所述。在C++中,理想情况下是11,但也对14及更高版本感到好奇,是否有以下简写语法:std::mutexsomeMutex;std::lock_guardlg(someMutex);如果我想更改为std::recursive_mutex,最好是推断互斥锁的类型以避免重构.换句话说,一种方法:std::mutexsomeMutex;std::lock_guardlg(someMutex);或者autolg=make_lock_guard(someMutex);对于现代C++的所有类型推断能力,输入std::lock_guard似乎是非常多余的。每次我想做一个。

c++ - 我还应该使用#include guard 和#pragma 一次吗?

http://en.wikipedia.org/wiki/Pragma_once当所有这些编译器都支持#pragmaonce时,我还应该使用包含防护吗?很多关于堆栈溢出的响应都说要同时使用两者以实现兼容性,但我不确定这是否仍然正确。现在有哪些编译器不支持#pragmaonce?我不确定这两种方法在被广泛采用之前是否只是一个建议,或者是否仍有充分的理由同时使用这两种方法。仅使用#pragmaonce会导致问题的任何示例? 最佳答案 这取决于您的程序的可移植性。只要您编写的程序应该与您知道肯定支持#pramaonce的编译器一起工作,只

c++ - malloc 和放置 new vs. new

过去几天我一直在研究这个问题,到目前为止,除了教条式的论点或诉诸传统(即“这是C++方式!”)之外,我还没有真正找到任何令人信服的东西。如果我正在创建一个对象数组,那么使用的令人信服的原因(除了易用性)是什么:#defineMY_ARRAY_SIZE10//...my_object*my_array=newmy_object[MY_ARRAY_SIZE];for(inti=0;i超过#defineMEMORY_ERROR-1#defineMY_ARRAY_SIZE10//...my_object*my_array=(my_object*)malloc(sizeof(my_object)