加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

我想在Linux / C/C++中使用任意大的缓冲区

发布时间:2020-12-14 01:06:40 所属栏目:Linux 来源:网络整理
导读:基本上我想要一个任意大的堆栈.我知道这是不可能的,但是我能为它留出几TB的虚拟地址空间吗?我希望能够从头开始,并根据需要走缓冲区,Linux可以根据需要从物理内存中引入页面.有可能吗?它是否具有与仅使用malloc-a缓冲区相同的性能?一旦你弹出堆栈,是否有办
基本上我想要一个任意大的堆栈.我知道这是不可能的,但是我能为它留出几TB的虚拟地址空间吗?我希望能够从头开始,并根据需要走缓冲区,Linux可以根据需要从物理内存中引入页面.有可能吗?它是否具有与仅使用malloc-a缓冲区相同的性能?一旦你弹出堆栈,是否有办法向Linux发信号通知你已完成内存?

编辑:我想要这个,因为我想优化一个递归/并行算法,在每次调用时分配大量内存. Malloc对我来说太慢了,我不希望所有的线程都在malloc的锁内相互绊倒.所以基本上它将是我自己的运行时堆栈与真实堆栈(每个线程一个).

实际上,只要运行时堆栈足够大就应该足够好.有没有办法知道/确保堆栈的大小?在64位地址空间中,有足够的空间可以将多个线程堆叠 – 分配千兆字节的数据.那可行吗?

看起来pthread_attr_setstacksize可以用于新线程,但是如果可以从任何线程调用那么这没有多大帮助……

解决方法

您可以使用带有MAP_ANONYMOUS |的mmap()创建此类分配MAP_NORESERVE | MAP_PRIVATE标志.如果要将其释放回系统,请使用munmap().

请注意,您可以通过接收SIGSEGV的过程来了解内存是否足以满足您的实际使用的唯一方法 – 但这需要一个比可用内存大得多的巨型映射.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读