В процессе Linux каждый поток имеет свой собственный стек. Кроме того, что еще является локальным для каждого потока. Я читал такие вещи, как таблица распределения файлов и т. Д. Может ли кто-нибудь предоставить мне список вещей, относящихся к потоку, и того, как они расположены в памяти.
Во-вторых, я заметил, что когда я выделяю стек потоку (см. Код ниже), адрес первой переменной в функции потока каким-то образом занимает несколько байтов после выделенного мной адреса стека ( stackAddr ). Я думаю, это связано с тем, что вершина стека является конечным адресом выделенной памяти стека, поскольку разница в значении адреса локальной переменной и выделенного стека приблизительно равна размеру стека ( STACKSIZE ). Другими словами, похоже, что он растет снизу вверх.
pthread_attr_init( &attr[tid] );
stackAddr = malloc(STACKSIZE);
pthread_attr_setstack( &attr, stackAddr, STACKSIZE );