草庐IT

malloc_allocator

全部标签

c++ - C++ 中的对齐 malloc

我对《破解编码面试》一书中的第13.9题有一道题。题目是写一个支持分配内存的alignedallocandfreefunction,答案中的代码如下:void*aligned_malloc(size_trequired_bytes,size_talignment){void*p1;void**p2;intoffset=alignment-1+sizeof(void*);if((p1=(void*)malloc(required_bytes+offset))==NULL)returnNULL;p2=(void**)(((size_t)(p1)+offset)&~(alignment-1)

c++ - 如果使用 delete 而不是 free 删除使用 malloc 分配的内存怎么办

我遇到了一个我无法解决的问题。我的问题是,如果我使用malloc分配内存,然后使用delete删除内存块?一般的经验法则是Ifweallocatememoryusingmalloc,itshouldbedeletedusingfree.Ifweallocatememoryusingnew,itshouldbedeletedusingdelete.现在,为了检查如果我们反过来会发生什么,我写了一个小代码。#include#include#includeusingnamespacestd;classA{intp=10;public:intlol(){returnp;}};intmain()

c++ - malloc 多个小时间或几个大时间更快?

当使用malloc分配内存时,对较小的数据block进行多次malloc还是对较大的数据block进行较少的malloc通常更快?例如,假设您正在处理一个包含黑色像素和白色像素的图像文件。您正在遍历像素并希望将每个黑色像素的x和y位置保存在一个新结构中,该结构还具有指向下一个和上一个像素x和y值的指针。使用指针为每个黑色像素的x和y值分配一个新结构来遍历像素通常会更快,还是通过遍历一次来计算黑色像素的数量,然后分配一个大的使用仅包含x和y值但不包含指针的结构的内存块,然后再次迭代,将x和y值保存到该数组中?我假设某些平台在哪个更快方面可能与其他平台不同,但每个人都认为什么通常会更快?

c++ - malloc 在这段代码中做了什么?

你能解释一下下面的代码吗?str=(char*)malloc(sizeof(char)*(num+1));malloc在这里做什么?为什么使用num+1? 最佳答案 malloc是一个函数thatallocatesachunkofmemoryontheheap并返回pointer给它。它类似于许多语言中的new运算符。在这种情况下,它创建了一个内存块,该内存块可以在任意时间长度内存活并且具有任意大小。这本身就是相当深入的东西,有点难以解释,需要单独提出一个问题。num+1补偿了nullterminator在字符串的末尾。字符串通常需

c++ - boost pool_alloc

为什么boost::fast_pool_allocator建立在单例池之上,而不是每个分配器实例一个单独的池?或者换句话说,为什么只提供那个,而不是每个分配器都有一个池的选项?那样做会不会是个坏主意?我有一个类在内部使用大约10种不同的boost::unordered_map类型。如果我使用了std::allocator,那么在它调用delete时所有内存都会返回给系统,而现在我必须在某些时候对许多不同的分配器类型调用release_memory。我自己推出使用池而不是singleton_pool的分配器是否愚蠢?谢谢 最佳答案 分

c++ - forward_list、set、list 等如何调用 std::allocator?

我注意到分配器只能分配T类型的对象并保留大小为n*sizeof(T)的内存块.std::list内部的链表节点然而,类型不一定是T类型的对象,它们的大小也不一定与T相同对象。那样的话,怎么可能std::list使用std::allocator分配内存? 最佳答案 这就是为什么rebindtype存在。它允许您创建一个类似的分配器,而不是分配其他东西(例如node)。基本上是这样的:std::allocatorint_alloc;std::allocator::rebind>node_alloc;//Perhapsmoreuseful

c++ - 在没有 Malloc/New 或 Free/Delete 的情况下管理连续的内存块

如果没有C++中其他内存管理器(例如Malloc/New)的帮助,如何创建自定义MemoryManager来管理给定的连续内存块?这里有更多的上下文:MemManager::MemManager(void*memory,unsignedchartotalsize){Memory=memory;MemSize=totalsize;}我需要能够使用MemManager分配和释放此连续内存块。构造函数被赋予block的总大小(以字节为单位)。分配函数应以字节为单位获取所需的内存量,并返回指向该内存块开头的指针。如果没有内存剩余,则返回NULL指针。Deallocate函数应接收指向必须释放的

c++ - VC++ 支持_mm_malloc 吗?

VisualStudioC++2008/2010是否正式支持_mm_malloc?它在malloc.h中定义,但我在MSDN库中找不到它的描述。 最佳答案 没有直接回答您的问题,但我认为您应该使用_aligned_malloc.如果我的理解是正确的,_mm_malloc适用于英特尔编译器。 关于c++-VC++支持_mm_malloc吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

c++ - 自定义异常层次结构。来自 std::exception 和 std::bad_alloc 的可怕钻石

我在自己的异常层次结构中遇到继承问题。Exception类具有很好的功能(回溯、日志记录等),因此它是我处理任何异常的基类。正如我在许多网页中看到的那样,它继承自std::exception。此外,我正在使用一个单元测试框架来报告任何std::exception被意外抛出。但归根结底,这只是为了方便。然后,我有一个新的OutOfMemoryException类,它将由自定义new_handler抛出。该类继承自Exception,但也继承自std::bad_alloc以兼容现有代码。我猜这更重要,因为new将不再抛出std::bad_alloc。这里的问题很明显:因为std::bad_

c++ - std::allocator 中 "destroy" "destructor" "deallocate"之间的区别?

在C++std::allocator中,有三个方法与一个共同的概念相关:解除分配销毁析构函数我想知道:从内存管理的角度来看,它们之间有何不同?我什么时候应该使用这个而不是那个?谢谢!编辑:更具体的疑问:一开始不好意思笼统地说,这里有一些我不明白的地方。析构函数是做什么的?文档没有说到析构函数调用时内存是否会自动释放destroy用于调用对象的析构函数,这里的“对象”是什么意思?再次感谢! 最佳答案 只是来自cppreference.comdocumentation的简短描述为我非常清楚地解释差异"1.Whatdoesdestruct