草庐IT

MALLOC_MMAP_THRESHOLD

全部标签

c - 使用 Malloc 在 C 中定义结构

我问了一个questionearlier关于使用malloc定义结构。这是大多数人给我的答案:structretValue*st=malloc(sizeof(*st));我正在向friend展示我的代码,但我们遇到了一个绊脚石。有人可以解释为什么这段代码有效吗?从我的角度来看,*st在你malloc时没有被定义,所以那里可能有任何类型的垃圾。应该是malloc(sizeof(structretValue))感谢您的帮助 最佳答案 Sizeof查看给它的表达式的类型,它不计算表达式。因此,您只需要确保声明了表达式中使用的变量,以便编译

c - mmap的对齐和粒度

我对specificationofmmap感到困惑.设pa为mmap的返回地址(同规范)pa=mmap(addr,len,prot,flags,fildes,off);我认为函数调用成功后,以下范围是有效的[pa,pa+len)我的问题是以下范围是否仍然有效?[round_down(pa,pagesize),round_up(pa+len,pagesize))[base,base+size]forshort也就是说:base是否总是与页面边界对齐?size是否总是pagesize的倍数(粒度就是pagesize)?感谢您的帮助。我认为这一段暗示了:Theoffargumentiscon

c++ - 限制用于 mmap 的缓冲区缓存

我有一个数据结构,我想修改它以按需分页。mmap似乎是运行一些初始实验的简单方法。但是,我想限制mmap使用的缓冲区缓存量。机器有足够的内存将整个数据结构分页到缓存中,但出于测试原因(以及一些生产原因)我不想让它这样做。有没有办法限制mmap使用的缓冲区缓存量?或者,一个mmap替代方案也可以实现类似的功能,但仍会限制内存使用。 最佳答案 据我了解,这是不可能的。内存映射由操作系统控制。内核将决定如何以最佳方式使用可用内存,但它会综合考虑系统。我不知道是否支持进程级别的缓存配额(至少,我没有在Linux或BSD中看到此类API)。有

c++ - 有没有办法减少 ostringstream malloc/free 的?

我正在编写一个嵌入式应用程序。在某些地方,我经常使用std::ostringstream,因为它对我的目的非常方便。但是,我刚刚发现性能受到极大影响,因为向流中添加数据会导致对malloc和free的大量调用。有什么办法可以避免吗?我的第一个想法是将ostringstream设为静态并使用ostringstream::set("")重置它。但是,这无法完成,因为我需要这些函数是可重入的。 最佳答案 好吧,Booger的解决方案是切换到sprintf()。它不安全且容易出错,但通常速度更快。但并非总是如此。初始化后,我们不能在我的实时

c - 是否有任何操作系统为 malloc() 实现缓冲?

for/while/do中的大量c/malloc()会消耗大量时间,所以我很好奇是否有任何操作系统为快速malloc缓冲内存。我一直在思考是否可以通过为malloc编写“贪婪”包装器来加速malloc。例如。当我要求1MB内存时,初始分配器将分配10MB,然后在第2、3、4等...调用malloc函数将简单地从首先以“正常”方式分配的block返回内存。当然,如果没有足够的可用内存,您将需要分配一个新的贪婪内存块。不知何故,我认为以前一定有人做过这个或类似的事情。所以我的问题很简单:这是否会显着加快内存分配过程。(是的,我可以在提问之前尝试过,但如果没有必要,我只是懒得写这样的东西)

c++ - 为什么在 32 位 armv7l 上 mmap 4GB 文件成功?

我从mmap(2)手册页和搜索结果中得到的印象是,mmap只限于系统可用的地址空间,减去系统保留的地址空间.所以在32位armv7l上,我假设它大约是3GB=(4GB-1GB)。但似乎我实际上可以mmap一个5GB的文件而没有任何问题:intmain(intargc,char**argv){//statschar*path=argv[1];structstatsb;stat(path,&sb);std::cout使用-D_FILE_OFFSET_BITS=64标志编译:g++-D_FILE_OFFSET_BITS=64test.cc结果产生:Filesize:5045966585Fil

c++ - 如果通过委托(delegate)给 `free` 的重载 `new[]` 分配内存,那么 `malloc` 内存是否安全?

我的问题与Isitsafeto`free()`memoryallocatedby`new`?不重复.我正在为POD编写一个玩具垃圾收集器,我在其中定义了我自己的自定义operatornew/new[]和operatordelete/delete[].代码如下:#include#includestd::mapmemory;//globallyallocatedmemorymapstructcollect_t{}collect;//tagforplacementnewvoid*operatornew(std::size_tsize,constcollect_t&){void*addr=ma

c - mmap 物理连续内存

我在这里可能有一些误解,请耐心等待。我编写了一个从相机捕捉图像的程序。正如我在V4L2documentation中找到的那样,我正在使用mmap在相机和我的应用程序之间共享内存。.这很好用。现在我的处理器(它是TI的DM3730)也有一个DSP。我想使用DSP,但它需要物理连续内存。TI提供驱动程序来分配内存。我的问题是,现在我浪费了很多时间来将映射的内存复制到物理连续内存中。有没有办法告诉mmap它不应该自己分配内存,而是告诉mmap使用我分配的内存。为了让您了解我在做什么(当然缺少很多代码,但我非常接近V4L2文档。我希望这足以理解我的问题)://reservephysicalco

升级到 Lollipop 后,Android NDK mmap 调用在 32 位设备上中断

我正在尝试获取784MiB的内存。是的,我知道这对于32位手机来说很多,但以下调用在Android5.0之前有效:mmap(0,0x31000000,PROT_NONE,MAP_ANON|MAP_SHARED,-1,0);但是,在来自不同制造商的三款不同设备上,升级到Android5.0打破了这一点。我认为这是5.0中内存分配功能的一些变化;也许需要传入不同的标志?这是logcat中返回的错误消息:E/libc﹕mmapfail(pid9994,tid10125,size822083584,flags0x21,errno12(Outofmemory)) 最佳

objective-c - ARC 会为您释放 malloc 的内存吗?

自动引用计数释放已分配的Objective-C对象。像char*这样的原始变量呢? 最佳答案 没有,根据llvmdocumentonARCAutomaticReferenceCountingimplementsautomaticmemorymanagementforObjective-Cobjectsandblocks,freeingtheprogrammerfromtheneedexplicitlyinsertretainsandreleases.Itdoesnotprovideacyclecollector;usersmuste