草庐IT

malloc_ptr_t

全部标签

c - linux下的malloc,隐式限制

很抱歉,如果标题没有达到应有的描述性,这个问题很难用几句话来表达。我试图通过malloc'ing找出我有多少内存可用,如果可行,则写入该段。在某些系统(x86_64上的所有linux)上,我在写入第2049个mib时看到段错误。代码是:#include#include#include#include#includeintmain(intargc,char**argv){void*addr;intmegasize=2100///allocatethememoryviammapsameresult//addr=mmap((void*)0,(size_t)megasize它在某些系统上可靠地

c - Ubuntu 16.04 - malloc 实现。指向下一个 block 的指针在哪里?

我想了解glibc中的malloc实现是如何工作的。根据malloc的源代码(glibc2.23中的malloc.c),空闲内存块具有以下结构。chunk->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|Sizeofpreviouschunk|+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+`head:'|Sizeofchunk,inbytes|P|mem->+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

c++ - eclipse 中的 unique_ptr 自动完成

我正在玩unique_ptr。在我的lastpost人们通过在编译期间指定-std=c++0x帮助我编译了一个使用此指针的程序。现在我想知道是否有任何方法可以指示eclipse在自动完成时考虑c++11?unique_ptr不在std::命名空间的列表中,我也找不到与unique_ptr关联的方法(重置、移动...)。谢谢瓦赫德 最佳答案 “内存”头文件(可能位于/usr/include/c++/4.9/memory)仅包含“unique_ptr.h”和“shared_ptr.h”(可能位于/usr/include/c++/4.9/

linux - 在 Tegra TK1 上使用 malloc() 与 cudaHostAlloc() 分配的数据的 CPU 内存访问延迟

我正在执行一个简单的测试,比较主机(CPU正在执行访问)使用malloc()分配的数据和使用cudaHostAlloc()分配的数据的访问延迟。我注意到在JetsonTk1上访问使用cudaHostAlloc()分配的数据比访问使用malloc()分配的数据慢得多。独立GPU并非如此,似乎仅适用于TK1。经过一些调查,我发现用cudaHostAlloc()分配的数据被内存映射(mmap)到进程地址空间的/dev/nvmap区域。对于映射到进程堆上的普通malloc数据,情况并非如此。我知道此映射可能是允许GPU访问数据所必需的,因为cudaHostAlloc的数据必须从主机和设备可见。

c - Linux 中的 malloc() - "there is no guarantee that the memory really is available"?

我正在制作一款游戏,其中世界被分成描述世界的数据block。我将block保存在一个动态分配的数组中,因此在初始化世界数据结构时我必须使用malloc()。阅读malloc()manpage,有注释如下:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenmalloc()returnsnon-NULLthereisnoguaranteethatthememoryreallyisavailable.Incaseitturnsoutthatthesystemisoutofmemory,one

c - 强制 free() 将 malloc 内存返回给操作系统

似乎即使在我为malloc()分配的Linux进程释放了所有内存之后,内存仍保留给进程,不会返回给操作系统。默认运行valgrindmassif工具显示没有泄漏。使用--pages-as-heap=yes运行valgrind揭示了这一点:->13.77%(7,655,424B)0x35FEEEB069:brk(brk.c:31)->13.77%(7,655,424B)0x35FEEEB113:sbrk(sbrk.c:53)->13.77%(7,655,424B)0x35FEE82717:__default_morecore(morecore.c:48)->13.77%(7,655,42

c++ - realloc和calloc是否调用malloc?

这可能是一个简单的问题,但我找不到答案。malloc是在realloc内部调用还是在calloc内部调用?因为我以某种方式计算了malloc调用,所以这对我来说很有趣。谢谢 最佳答案 您不应尝试依赖系统、库或编译器依赖机制。即使您知道realloc在一个系统/编译器/库上调用malloc,您也不能确定它会在其他系统上以相同的方式处理。此时的问题是,您要实现的目标是什么。如果您需要跟踪内存使用情况,C++中有更好的方法,例如为operatorsnew和delete安装全局替换。在某些版本的Linux中,您还可以向malloc添加Hoo

c - 从 pthread 退出会释放 malloced 内存吗?

假设我已经使用pthread_create()启动了新线程,然后使用pthread_detach()将其分离。现在,在线程上下文的内,我使用malloc()分配了一些内存。当线程退出时,malloc'ed内存会自动释放吗? 最佳答案 线程共享内存资源(至少是POSIX)。malloc()/realloc()/free()内存管理实际上并不知道线程(至少到现在为止)。因此您应该将malloc()的结果视为简单的“资源”。它不是线程链接的。所以现在答案应该很明显了,分配的任何内存都没有链接到线程,所以它在线程退出时不是free()'d。

c - malloc 返回内存或虚拟地址空间

malloc是在堆上分配一block内存还是应该叫虚拟地址空间?我是在挑剔地称它为虚拟地址空间,还是这只是DOS的遗留问题?Linux怎么样?编辑:许多答案都非常详细,但没有一个能回答我的问题。 最佳答案 malloc在堆上分配内存,期间。您的C库通常保留可用内存块的列表(或一些更复杂的数据结构),找到合适的block来满足malloc(可能将较大的block拆分为多个较小的block)并将free的内存返回到列表中(可能将几个较小的block合并成一个更大的block)仅当列表不包含足够大的block来满足您的malloc时,库将

linux - mmap 与 malloc : strange performance

我正在编写一些解析日志文件的代码,需要注意的是这些文件是压缩的,必须即时解压缩。这段代码对性能有些敏感,所以我正在尝试各种方法来找到正确的代码。无论我使用多少个线程,我基本上都拥有程序所需的RAM。我发现了一种似乎表现相当不错的方法,并且我正在尝试了解它提供更好性能的原因。这两种方法都有一个读取器线程,一个从管道gzip进程读取并写入一个大缓冲区。然后在请求下一个日志行时延迟解析此缓冲区,返回本质上是指向缓冲区中不同字段所在位置的指针结构。代码在D中,但它与C或C++非常相似。共享变量:shared(bool)_stream_empty=false;;shared(ulong)uppe