草庐IT

png_malloc

全部标签

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++ - libpng 错误 : PNG unsigned integer out of range

当尝试从内存中读取PNG时,我遇到了这个奇怪的错误:libpngerror::PNGunsignedintegeroutofrange这个错误是由引起的png_read_info(png_ptr,info_ptr);它使用以下处理程序:staticvoidReadDataFromBuffer(png_structppng_ptr,png_bytepoutBytes,png_size_tbyteCountToRead){PNGDataPtrdataptr=(PNGDataPtr)png_get_io_ptr(png_ptr);png_uint_32i;coutlenpdataptr->l

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++ - new/malloc 或 delete/free 是否占用或使缓存行无效?

我对缓存行为很好奇。下面是一些与缓存相关的问题:写操作是否将数据带入缓存?考虑像A[i]=B[i]这样的赋值,A[i]会被加载到缓存中吗?因为我只是将一些东西写入A[i]而不是读取它的值。分配大内存时,内存可能来自操作系统。出于安全原因,操作系统会将数据初始化为零(Reference)。如果赋值会把数据带入缓存(问题1),这种机制会占用缓存吗?假设有一个已分配的数组B,并且整个B现在都在缓存中。释放数组B后,B占用的缓存行是否会立即失效(可用)?有人可以给我提示吗? 最佳答案 从这里https://people.freebsd.or

c++ - libpng png_set_add_alpha | png_set_filler 错误 : sequential row overflow

我正在尝试使用C读取PNG文件以用于OpenCL。OpenCL不支持24位RGB图像,因此我需要将数据从RGB扩展到RGBA。我使用的PNG都是24位的,因此可以避免头痛。我曾尝试使用png_set_filler和png_set_add_alpha,我认为它们大致相同来解决问题,但它们都会导致此错误:libpngerror:sequentialrowoverflow这里是完整的函数:intLoadPNG24(unsignedchar**pixelBuffer,constchar*filename,unsignedint*width,unsignedint*height){png_byt

c++ - 在 C++ 中从 HBITMAP 转换为 Jpeg 或 Png

有谁知道如何使用HBITMAP变量来编写png或jpeg文件?我首先研究了使用GDI+执行此操作,但它给了我错误,告诉我尚未定义最小/最大值(定义它们只会带来更多问题),然后我查看了libpng的C++绑定(bind)(png++),但无法获得要编译的示例。谢谢,米奇 最佳答案 HBITMAPbmp;CImageimage;image.Attach(bmp);image.Save("filename.jpg");//changeextensiontosavetopng 关于c++-在C+

c++ - Visual C++ 运行时 malloc/free 会将内存返回给操作系统吗?

问题与Willmallocimplementationsreturnfree-edmemorybacktothesystem?非常相似,但我对Windows/MicrosoftVisualStudio的答案以及有关确切虚拟内存状态的详细信息感兴趣。请问VisualC++CRTfree将内存还给系统?关于虚拟内存分配,内存的确切状态是什么?对一个大内存块做free之后,block中的内存是committed,reserved,还是free?如果我调用_heapmin怎么办?免费后? 最佳答案 查看2010的源码,可以看到malloc/

c++ - LD_PRELOAD 仅适用于 malloc,不是免费的

我正在尝试通过LD_PRELOAD将malloc/free/calloc/realloc等插入到一些插入器中。在我的小测试中,似乎只有malloc被插入,即使free被检测到(见输出)。我希望输出包含一行“NANO:free(x)”——但缺少这一行。给定//compilewith:gcctest.cc#include#includeintmain(intargc,char*argv[]){void*p=malloc(123);printf("HOSTp=%p\n",p);free(p);}和//compilewith:g++-O2-Wall-fPIC-ldl-olibnano.so-s