Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中线程的内存分配_C_Linux - Fatal编程技术网

c语言中线程的内存分配

c语言中线程的内存分配,c,linux,C,Linux,如何减少C中线程使用的内存?虽然一个线程需要8到10 MB的内存,但是有没有办法减少这个内存?是的,您可以设置线程堆栈的大小 pthread_attr_t attribute; pthread_t thread; pthread_attr_init(&attribute); pthread_attr_setstacksize(&attribute,size); // size may be defined by u as 1024,2048,etc pthread_create(

如何减少C中线程使用的内存?虽然一个线程需要8到10 MB的内存,但是有没有办法减少这个内存?

是的,您可以设置线程堆栈的大小

pthread_attr_t attribute;
pthread_t thread;
pthread_attr_init(&attribute);
pthread_attr_setstacksize(&attribute,size); // size may be defined by u as 1024,2048,etc
pthread_create(&thread,&attribute,fun,0);

void *fun(void *arg)
{
      ....
}

如前所述,您可以在应用程序中使用pthread属性

但您也可以使用ulimit命令对当前shell中启动的任何应用程序设置限制:

  • ulimit-s
    :以千磅为单位显示当前限制
  • ulimit-s1024
    :将堆栈限制为1个MiB

如果你理性地思考这个问题,它不应该成为一个问题。你的CPU有多少核?您要启动多少线程?如果你试图启动2000个线程,内存将不是你面临的唯一问题。要考虑的另一件事是,在大多数系统中,堆栈被分配成组的页面(通常是4kb),一次一个地自动增长。即使您的线程库为堆栈分配了X个MB,也并不意味着它们实际上正在被使用。作为一个实验:编写一个程序,分配所有可用的物理RAM,然后休眠。运行它并检查它的实际使用内存(RSS、常驻集)。