草庐IT

mmap_alloc

全部标签

带有 MAP_POPULATE 的 Linux mmap(),手册页似乎提供了错误的信息

在我看来,MAP_POPULATE不仅仅用于私有(private)映射,这与手册页所说的相矛盾:MAP_POPULATE(sinceLinux2.5.46)Populate(prefault)pagetablesforamapping.Forafilemapping,thiscausesread-aheadonthefile.Lateraccessestothemappingwillnotbeblockedbypagefaults.MAP_POPULATEisonlysupportedforprivatemappingssinceLinux2.6.23.基于我对mmap.c的Linux

带有 MAP_POPULATE 的 Linux mmap(),手册页似乎提供了错误的信息

在我看来,MAP_POPULATE不仅仅用于私有(private)映射,这与手册页所说的相矛盾:MAP_POPULATE(sinceLinux2.5.46)Populate(prefault)pagetablesforamapping.Forafilemapping,thiscausesread-aheadonthefile.Lateraccessestothemappingwillnotbeblockedbypagefaults.MAP_POPULATEisonlysupportedforprivatemappingssinceLinux2.6.23.基于我对mmap.c的Linux

c++ - std::bad_alloc 被抛出的其他可能原因

我正在开发一个相当大的SIP电话应用程序,有时当我们在高调用负载下使用集成的WebUI(使用tntnet编写)时,程序将由于抛出std::bad_alloc而退出。有数百个线程在使用(每个事件调用3个),因此导致异常的代码位置非常随机,但总是在使用GUI之后。现在,我明白std::bad_alloc可以在内存不足时抛出,但在这种情况下并非如此。我还认为它可以在出现堆损坏时抛出,我仍在寻找它在代码库中的任何位置。但我的问题是,除了内存不足或堆损坏之外,还有其他原因导致std::bad_alloc被抛出吗?我在Linux上使用GNUg++。 最佳答案

c++ - std::bad_alloc 被抛出的其他可能原因

我正在开发一个相当大的SIP电话应用程序,有时当我们在高调用负载下使用集成的WebUI(使用tntnet编写)时,程序将由于抛出std::bad_alloc而退出。有数百个线程在使用(每个事件调用3个),因此导致异常的代码位置非常随机,但总是在使用GUI之后。现在,我明白std::bad_alloc可以在内存不足时抛出,但在这种情况下并非如此。我还认为它可以在出现堆损坏时抛出,我仍在寻找它在代码库中的任何位置。但我的问题是,除了内存不足或堆损坏之外,还有其他原因导致std::bad_alloc被抛出吗?我在Linux上使用GNUg++。 最佳答案

c - 在 malloc 中,为什么要使用 brk?为什么不直接使用 mmap?

malloc的典型实现使用brk/sbrk作为从操作系统申请内存的主要方式。但是,他们还使用mmap来获取大分配的block。使用brk而不是mmap真的有好处吗,还是只是传统?用mmap做这一切不是同样有效吗?(注意:我在这里互换使用sbrk和brk因为它们是同一个Linux系统调用brk的接口(interface)。)作为引用,这里有一些描述glibcmalloc的文档:GNUC库引用手册:GNU分配器https://www.gnu.org/software/libc/manual/html_node/The-GNU-Allocator.htmlglibcwiki:Malloc概述

c - 在 malloc 中,为什么要使用 brk?为什么不直接使用 mmap?

malloc的典型实现使用brk/sbrk作为从操作系统申请内存的主要方式。但是,他们还使用mmap来获取大分配的block。使用brk而不是mmap真的有好处吗,还是只是传统?用mmap做这一切不是同样有效吗?(注意:我在这里互换使用sbrk和brk因为它们是同一个Linux系统调用brk的接口(interface)。)作为引用,这里有一些描述glibcmalloc的文档:GNUC库引用手册:GNU分配器https://www.gnu.org/software/libc/manual/html_node/The-GNU-Allocator.htmlglibcwiki:Malloc概述

c - mmap/mprotect-readonly 零页是否计入已提交内存?

我想在我的进程中保留虚拟地址空间,用于以前使用但目前不需要的内存。我对主机内核是Linux并且配置为防止过度使用(它通过详细计算所有已提交的内存来实现)的情况感兴趣。如果我只是想防止我的应用程序不再使用的数据占用物理内存或交换到磁盘(无论哪种方式都在浪费资源),我可以madvise不需要它的内核,或mmap新的零页覆盖在它上面。但是,这两种方法都不一定会减少算作已提交的内存量,从而阻止其他进程使用这些内存。如果我用标记为只读的新零页替换这些页会怎样?我的意图是它们不计入提交的内存,而且我以后可以使用mprotect使它们可写,如果使它们可写会超过提交的内存限制,它将失败。我的理解正确吗

c - mmap/mprotect-readonly 零页是否计入已提交内存?

我想在我的进程中保留虚拟地址空间,用于以前使用但目前不需要的内存。我对主机内核是Linux并且配置为防止过度使用(它通过详细计算所有已提交的内存来实现)的情况感兴趣。如果我只是想防止我的应用程序不再使用的数据占用物理内存或交换到磁盘(无论哪种方式都在浪费资源),我可以madvise不需要它的内核,或mmap新的零页覆盖在它上面。但是,这两种方法都不一定会减少算作已提交的内存量,从而阻止其他进程使用这些内存。如果我用标记为只读的新零页替换这些页会怎样?我的意图是它们不计入提交的内存,而且我以后可以使用mprotect使它们可写,如果使它们可写会超过提交的内存限制,它将失败。我的理解正确吗

linux - 使用 mmap 的 Emacs 缓冲区分配

为什么mmap缓冲区分配在cygwin、freebsd和irix6-5上默认激活,但在linux上却没有?请参阅emacs/src/config.h中的USE_MMAP_FOR_BUFFERS。以及emacs/configure.in中的use_mmap_for_buffers。基于mmap的访问是否优于正常的缓冲区分配? 最佳答案 默认的glibcmalloc()使用mmap进行大分配;来自malloc(3)联机帮助页。“当分配大于MMAP_THRESHOLD字节的内存块时,glibcmalloc()实现使用mmap(2)将内存分

linux - 使用 mmap 的 Emacs 缓冲区分配

为什么mmap缓冲区分配在cygwin、freebsd和irix6-5上默认激活,但在linux上却没有?请参阅emacs/src/config.h中的USE_MMAP_FOR_BUFFERS。以及emacs/configure.in中的use_mmap_for_buffers。基于mmap的访问是否优于正常的缓冲区分配? 最佳答案 默认的glibcmalloc()使用mmap进行大分配;来自malloc(3)联机帮助页。“当分配大于MMAP_THRESHOLD字节的内存块时,glibcmalloc()实现使用mmap(2)将内存分