【发布时间】:2015-02-07 09:20:49
【问题描述】:
void * thread_client_timeout_check(void *arg)
{
pthread_attr_t attr;size_t size;
pthread_attr_init(&attr);
pthread_attr_getstacksize(&attr, &size);
printf("pthread stacksize: %d\n", size);
malloc(1);
}
主线程创建子线程并暂停。
int main()
{
pthread_t pid;
pthread_create(&pid, NULL, thread_client_timeout_check, NULL);
pause();
}
- 在
pthread_create之前,top virt是0.3m - 在
pthread_create之后,top virtis8.3m(pthread堆栈大小为8m) - 在
malloc(1),top virtis72.3m之后
为什么malloc(1) 会从内核获得54m 虚拟内存?
【问题讨论】:
-
没有其他线程做任何可能增加内存的事情?
-
如果 malloc 对每次分配都一直深入到内核,它会很慢。获取大块然后在用户空间中处理它们更有意义。
-
@Mat 你是对的,但是 54m 太大了。我先在主线程中检查
malloc(1),虚拟内存仍然是0.3m。 -
你是怎么得到
virt的?有topVIRT字段? -
是的,虚拟内存就是地址空间。几乎免费,尤其是在 64 位架构上。
标签: c linux multithreading glibc