Linux中进程/线程的大小是多少?创建进程/线程时,还有task_struct和其中的其他数据结构,还有什么吗?
进程/线程初始化(固定大小)时是否分配了进程/线程的堆栈?或者在必要时分配(如虚拟内存)?
在内存中创建标准进程/线程时,如何知道它的大小?
解决方法:
当在Linux上首次分配大块内存(> pagesize = 4096字节)时,它在页面表中使用了特殊的“空”内存页面,这些内存页面没有任何后盾,因此当一个线程启动时,它将分配~1 MB这些零页面的线程堆栈.随着堆栈的增长,页面将转换为实际内存支持的页面.由于这个“空”页面支持,通常可以拥有大量的堆栈.
线程和进程都是使用名为clone(2)的相同底层系统调用创建的.它有很多选择,并做很多东西.请参阅man clone获取详细说明.
大块内存分配有匿名mmap(2)调用.
您可能也有兴趣在网上搜索“linux overcommit bit”
(如果你想改进你的问题,我可以更具体.)
标签:c-3,linux,multithreading,kernel
来源: https://codeday.me/bug/20190626/1289570.html