基本上我想要一个任意大的堆栈。我知道这不可能,但我能为它分配几个 terabytes 的虚拟地址空间吗?我希望能从开头开始并向上遍历缓冲区直到需要的程度,Linux 可以按需从物理内存中调入页面。这种做法是否可行?与仅 malloc 一个缓冲区的性能相同吗?有没有一种方法可以向 Linux 发出信号,告诉他在弹出堆栈后你已经完成了内存操作?
编辑:我想要做到这一点是因为我想优化递归/并行算法,在每个调用中分配大量内存。Malloc 对我来说太慢了,我不希望所有线程在 malloc 的锁定内互相干扰。所以基本上它将是我的自己运行时堆栈与真正的堆栈(每个线程一个)。
实际上,只要运行时堆栈足够大,那就足够好了。有没有一种方法可以知道/确保堆栈的大小?在 64 位地址空间中,有足够的空间让几个线程堆栈分配 gigabytes 的数据。这可行吗?
看起来 pthread_attr_setstacksize 可以用于新线程,但如果可以从任何线程调用,那就没有什么帮助了...
编辑:我想要做到这一点是因为我想优化递归/并行算法,在每个调用中分配大量内存。Malloc 对我来说太慢了,我不希望所有线程在 malloc 的锁定内互相干扰。所以基本上它将是我的自己运行时堆栈与真正的堆栈(每个线程一个)。
实际上,只要运行时堆栈足够大,那就足够好了。有没有一种方法可以知道/确保堆栈的大小?在 64 位地址空间中,有足够的空间让几个线程堆栈分配 gigabytes 的数据。这可行吗?
看起来 pthread_attr_setstacksize 可以用于新线程,但如果可以从任何线程调用,那就没有什么帮助了...
std::stack
有什么问题吗? - tenfour