Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我想在Linux / C/C++中使用任意大的缓冲区大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

基本上我想要一个任意大的堆栈.我知道这是不可能的,但是我能为它留出几TB的虚拟地址空间吗?我希望能够从头开始,并根据需要走缓冲区, Linux可以根据需要从物理内存中引入页面.有可能吗?它是否具有与仅使用malloc-a缓冲区相同的性能?一旦你弹出堆栈,是否有办法向Linux发信号通知你已完成内存? 编辑:我想要这个,因为我想优化一个递归/并行算法,在每次调用时分配大量内存. Malloc对我来说
@H_607_13@
基本上我想要一个任意大的堆栈.我知道这是不可能的,但是我能为它留出几TB的虚拟地址空间吗?我希望能够从头开始,并根据需要走缓冲区,Linux可以根据需要从物理内存中引入页面.有可能吗?它是否具有与仅使用malloc-a缓冲区相同的性能?一旦你弹出堆栈,是否有办法向Linux发信号通知你已完成内存?

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

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

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

解决方法

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

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

大佬总结

以上是大佬教程为你收集整理的我想在Linux / C/C++中使用任意大的缓冲区全部内容,希望文章能够帮你解决我想在Linux / C/C++中使用任意大的缓冲区所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。