我试图在linux模块中分配一个很大的内存块,但是kalloc不能这样做。我知道唯一的方法是使用alloc_bootmem(unsigned long size),但我只能从linux内核中分配它,而不能从模块中分配。所以我想出了这个解决方案:对于我的情况,这是最好的解决方案吗?就像我说的,我需要处理一大块内存...
我的目标平台是x64/Linux。我希望我的绿色线程库适合于一般使用,所以堆栈应该根据需要进行扩展(合理的上限很好,例如10 my ),如果当太多内存未使用(不需要)时堆栈可以缩小,那就太好了。使用mmap()分配一大块内存,希望内核足够聪明,使物理内存保持未分配状态,并且只在访问堆栈时分配。在这种情况下,我们任由内核决定。用mmap(PROT_NONE)预留一个大内存空间,并设置一个SIGSEGV信号处理程序。在信号处理程序中,当SIGSEGV是由堆栈访问引