草庐IT

memory-efficient

全部标签

C/Linux : dual-map memory with different permissions

我的程序将数据指针传递给第三方插件,目的是数据应该是只读的,所以最好防止插件写入数据对象。理想情况下,如果插件尝试写入,则会出现段错误。我听说有一些方法可以双重映射一个内存区域,这样第二个虚拟地址范围就指向相同的物理内存页面。第二个映射没有写权限,导出的指针将使用此地址范围而不是原始(可写)地址范围。我宁愿不改变原来的内存分配,无论他们碰巧使用malloc或mmap或其他什么。谁能解释一下如何做到这一点? 最佳答案 获得双重映射是可能的,但需要一些工作。我知道如何创建这种双重映射的唯一方法是使用mmap函数调用。对于mmap,您需要

linux - GNU malloc_info() : get really allocated memory?

我正在尝试调查大型多线程服务器的内存使用情况。根据mallinfo(),我得到arena=350M和fordblks=290M,这表明大部分空间实际上在malloc()内部被浪费了.malloc_info()函数提供了一个很好的XML数据结构,应该是不言自明的。不过,有人能给我解释一下吗是堆0特别的?是所有其他人所在的主要舞台吗?是block已分配、空闲/可用或两者兼而有之?什么是元素?使用mmap()/sbrk()分配的内存?什么是元素?可用内存?那呢??作为开始,我希望能够根据malloc()绘制应用程序分配的总内存,即所有已分配但尚未释放的内存。认为。

Python 多处理 - 调试 OSError : [Errno 12] Cannot allocate memory

我面临以下问题。我正在尝试并行化更新文件的函数,但由于OSError:[Errno12]无法分配内存,我无法启动Pool()。我已经开始在服务器上环顾四周,这不像是我在使用一个旧的、弱的/实际内存不足的服务器。参见htop:此外,free-m显示除了~7GB的交换内存外,我还有足够的可用RAM:我尝试处理的文件也不是那么大。我将在下面粘贴我的代码(和堆栈跟踪),大小如下:使用的predictionmatrix数据帧占用了大约。80MB根据pandasdataframe.memory_usage()文件geo.geojson是2MB我该如何调试它?我可以检查什么以及如何检查?感谢您提供任

linux - 共享内存 : How does shmget()/shared memory work?

通过查看shmget()的手册页,我了解到shmget()调用会在内存中分配#ofpages,这些页面可以跨进程共享。是否要创建映射到进程本地地址空间的内核内存页?或者是否为该段保留了相同的进程内存页,并且也将共享给其他附加进程?我的假设:调用shmget()时,内核将保留一定数量的段/页。调用shmat()时,保留段映射到进程的地址空间/页面。当新进程附加到同一段时,先前创建的内核段将映射到新进程的地址空间。这是正确的吗? 最佳答案 这个想法或多或少是正确的,除了“内核内存页”的措辞。在内存管理中保留/分配的内存不是专门为内核设计

linux - 'low memory'在linux中是什么意思

嗨,我是韩国人,对“Bootstrap首先将自身复制到固定的高端内存地址以为操作系统释放低端内存”感到困惑。我通过谷歌搜索发现的关于低内存的知识是,这是DOS系统中的第一个640K内存。这是否意味着所有OS系统(如内核)都进入低内存(640K)????感谢阅读本文。 最佳答案 此链接可能会有帮助:VirtualMemory主要是,On32-bitsystems,memoryisnowdividedinto"high"and"low"memory.Lowmemorycontinuestobemappeddirectlyintothek

c++ - 在 Linux 上的 C++ 源文件上运行 'gcc' 给出 "cc1plus: out of memory allocating ..."错误消息

我在Ubuntu上使用“gcc”编译C++源文件时遇到了一个令人费解的问题。解决了这个问题后,我想在这里发布它,以免其他人为解决它而头疼。为了这份报告,我们有最简单的C++“Hello,World”程序,存储在main.cpp中:#includeintmain(intargc,char*argv[]){return0;}当我运行命令时:gccmain.cpp我收到错误信息:cc1plus:outofmemoryallocating1677721600bytesafteratotalof475136bytes我确认我正在编译正确的位(即32位)。我做错了什么?

c - Linux 零拷贝 : Transfer memory pages between two processes with vmsplice

目前,我正在尝试了解splice/vmsplice的值(value)。关于IPC的用例,我在stackoverflow上偶然发现了以下答案:https://stackoverflow.com/a/1350550/1305501问题:如何在不复制数据(即零复制)的情况下使用vmsplice将内存页从一个进程传输到另一个进程?上面提到的答案声称这是可能的。但是,它不包含任何源代码。如果我正确理解vmsplice的文档,如果内存已正确分配和对齐,则以下函数会将内存页面传输到管道(内核缓冲区)而不进行复制。为便于演示省略了错误处理。//dataisalignedtopageboundaries

PHP memory_get_usage(false) 与 memory_get_usage(true)

有人可以阐明memory_get_usage()的$real_usage参数的确切区别是什么吗?manual状态:SetthistoTRUEtogettherealsizeofmemoryallocatedfromsystem.IfnotsetorFALSEonlythememoryusedbyemalloc()isreported.但是有什么区别呢?哪个值与memory_limitINI设置相当?对于一些长时间运行的脚本,我得到大约250MB的实际使用量和50MB的emalloc使用量。这怎么可能?我正在尝试分析一些内存泄漏问题,memory_get_usage()是我需要充分理解的

php - php的memory_limit、upload_max_filesize和post_max_filesize的关系

底线:我是否需要担心设置post_max_filesize>>memory_limit?详情:Thisanswer建议上传的文件不需要在php的memory_limit之内。phpdocs建议整篇文章应该在php的内存限制之内。我发现这些文档令人惊讶,我希望有人能详细说明。例如采用以下php配置:;configAmemory_limit=50Mupload_max_filesize=100Mpost_max_filesize=1000Mmax_file_uploads=10和;configBmemory_limit=50Mupload_max_filesize=10Mpost_max_

phpunit memory_limit 参数不适用

我刚刚在macosx10.7中通过pear安装了phpunit,一切正常,除了出现内存限制错误(为报告启用了xdebug)。我尝试将-dmemory_limit=512M参数添加到phpunit但它没有应用,因为在第一个错误中,我添加了var_dump(ini_get('memory_limit'));exit;并打印string(3)"32M"那么,为什么它没有被应用呢?除此之外,如果我运行php-dmemory_limit=256M-r"echoini_get('memory_limit');"它呼应“256M”是否有可能phpunit没有执行相同的php?