草庐IT

malloc_ptr_t

全部标签

论 shared_ptr的线程安全

杂谈今天有同事问我shared_ptr是线程更安全的吗?我当时脑子一懵,有点不确定。但回过神来仔细一想这什么鸟问题,c++stl里有线程安全的吗,shared_ptr也不是针对线程安全而设计出来的呀,八竿子打不着的东西为什么会凑在一起问。好像也就一个atmoic引用计数可以沾上边。shared_ptr是个啥首先,shared_ptr往简单里说就是一个带引用计数的原始指针,引用计数自动控制原始指针资源释放;另外,引用技术使用的是原子变量,引用增加减少都是原子操作;从以上来看,他解决的是内存释放所有权的问题,充其量用原子的引用计数保证了正常使用下的多线程下的一块内存的释放的安全。什么是正常使用后面

malloc放置“垃圾”值

我如何防止或绕过我的变量中放置的垃圾Valusmalloc?附加了代码和输出!谢谢!#include#include"stdlib.h"#includeintmain(){char*hour_char="13";char*day_char="0";char*time=malloc(strlen(hour_char)+strlen(day_char)+2);time=strcat(time,day_char);time=strcat(time,"-");time=strcat(time,hour_char);printf("%s",time);free(time);}这是我得到的输出:á[┼0-

安卓日志 'GC_EXTERNAL_ALLOC' 'GC_FOR_MALLOC'

在运行我的应用程序时,我得到了这样的日志:GC_EXTERNAL_ALLOCfreed2K,38%free8772K/14087K,external17480K/17998K,paused87msGC_FOR_MALLOCfreed0K,38%free8772K/14087K,external17480K/17998K,paused67msGC_CONCURRENTfreed2125K,47%free6214K/11719K,external7142K/8400K,paused3ms+5ms有人知道这些日志是什么意思吗?提前致谢!“GC_EXTERNAL_ALLOC”、“GC_FOR_

安卓日志 'GC_EXTERNAL_ALLOC' 'GC_FOR_MALLOC'

在运行我的应用程序时,我得到了这样的日志:GC_EXTERNAL_ALLOCfreed2K,38%free8772K/14087K,external17480K/17998K,paused87msGC_FOR_MALLOCfreed0K,38%free8772K/14087K,external17480K/17998K,paused67msGC_CONCURRENTfreed2125K,47%free6214K/11719K,external7142K/8400K,paused3ms+5ms有人知道这些日志是什么意思吗?提前致谢!“GC_EXTERNAL_ALLOC”、“GC_FOR_

c++ - 相对于 memset,我可以从 std::fill_n(ptr, n, 0) 获得什么性能?

对于作为指针的迭代器ptr,std::fill_n(ptr,n,0)应该与memset(ptr,0,n*sizeof(*ptr))(但请参阅@KeithThompson对thisanswer的评论)。对于C++11/C++14/C++17模式下的C++编译器,在哪些条件下可以期望它们编译为相同的代码?并且当/如果它们不编译为相同的代码时,-O0是否存在显着的性能差异?-O3?注意:当然,部分/大部分答案可能是特定于编译器的。我只对一两个特定的编译器感兴趣,但请写下你知道答案的编译器。 最佳答案 答案取决于您对标准库的实现。例如,MS

c++ - 相对于 memset,我可以从 std::fill_n(ptr, n, 0) 获得什么性能?

对于作为指针的迭代器ptr,std::fill_n(ptr,n,0)应该与memset(ptr,0,n*sizeof(*ptr))(但请参阅@KeithThompson对thisanswer的评论)。对于C++11/C++14/C++17模式下的C++编译器,在哪些条件下可以期望它们编译为相同的代码?并且当/如果它们不编译为相同的代码时,-O0是否存在显着的性能差异?-O3?注意:当然,部分/大部分答案可能是特定于编译器的。我只对一两个特定的编译器感兴趣,但请写下你知道答案的编译器。 最佳答案 答案取决于您对标准库的实现。例如,MS

c - 释放分配给 char* (由 `malloc` 分配)的 int* 是否会调用未定义的行为?

标题可能令人困惑。假设str是一个由malloc分配的指针。ptr,类型为int*,被分配给它并被释放,如下面的代码片段所示:char*str=malloc(64);int*ptr=str;free(ptr);我试图编译上面的代码。它只是给出一个警告:source_file.c:Infunction‘main’:source_file.c:10:16:warning:initializationfromincompatiblepointertypeint*ptr=str;^上面的代码是否调用了未定义的行为?上面的代码片段是否释放了malloc为str分配的内存?

c - 释放分配给 char* (由 `malloc` 分配)的 int* 是否会调用未定义的行为?

标题可能令人困惑。假设str是一个由malloc分配的指针。ptr,类型为int*,被分配给它并被释放,如下面的代码片段所示:char*str=malloc(64);int*ptr=str;free(ptr);我试图编译上面的代码。它只是给出一个警告:source_file.c:Infunction‘main’:source_file.c:10:16:warning:initializationfromincompatiblepointertypeint*ptr=str;^上面的代码是否调用了未定义的行为?上面的代码片段是否释放了malloc为str分配的内存?

c++ - vector<unique_ptr> 使用 push_back 调整大小 - 它是如何工作的?

据我了解,当东西被push_back放入vector时,有时它必须分配一个新的内存块,导致将所有元素从旧内存块复制到其中,调用它们的析构函数。由于unique_ptr析构函数删除了拥有的内存,它们怎么可能与vector一起使用?在vector中使用unique_ptr是否安全?是不是比普通指针慢? 最佳答案 resultingincopyingalltheelementsintoitfromtheoldmemoryblock,callingtheirdestructors.Sinceunique_ptrdestructorsdele

c++ - vector<unique_ptr> 使用 push_back 调整大小 - 它是如何工作的?

据我了解,当东西被push_back放入vector时,有时它必须分配一个新的内存块,导致将所有元素从旧内存块复制到其中,调用它们的析构函数。由于unique_ptr析构函数删除了拥有的内存,它们怎么可能与vector一起使用?在vector中使用unique_ptr是否安全?是不是比普通指针慢? 最佳答案 resultingincopyingalltheelementsintoitfromtheoldmemoryblock,callingtheirdestructors.Sinceunique_ptrdestructorsdele