linux下pthread占用内存问题

在 Linux 系统中,pthread 线程的默认堆栈大小通常是 8MB(即 8388608 字节)。这个值可以通过以下方法查看或设置:

  1. 使用 ulimit 命令查看默认堆栈大小

    bash复制

    ulimit -s
    

    输出结果通常为 8192,表示 8MB(单位为 KB)。

  2. 通过代码获取默认堆栈大小

    c复制

    #include <pthread.h>
    #include <stdio.h>
    
    int main() {
        pthread_attr_t attr;
        size_t stack_size;
        pthread_attr_init(&attr);
        pthread_attr_getstacksize(&attr, &stack_size);
        printf("Default stack size: %lu bytes\n", stack_size);
        return 0;
    }
    

    运行该程序会输出默认堆栈大小,通常为 8388608 字节(即 8MB)。

  3. 设置自定义堆栈大小: 如果需要调整堆栈大小,可以使用 pthread_attr_setstacksize 函数。例如:

    c复制

    #include <pthread.h>
    #include <stdio.h>
    
    void* thread_start(void* arg) {
        printf("New thread stack size: %lu\n", pthread_get_stacksize_np(pthread_self()));
        return NULL;
    }
    
    int main() {
        pthread_t thread;
        pthread_attr_t attr;
        pthread_attr_init(&attr);
    
        // 设置堆栈大小为 1MB
        pthread_attr_setstacksize(&attr, 1024 * 1024);
    
        pthread_create(&thread, &attr, &thread_start, NULL);
        pthread_join(thread, NULL);
        pthread_attr_destroy(&attr);
        return 0;
    }
    

    在这个例子中,堆栈大小被设置为 1MB。

注意事项

  • 默认堆栈大小:默认值为 8MB,适用于大多数场景。如果内存资源有限(如嵌入式系统),可以适当减小堆栈大小。
  • 最小堆栈大小:堆栈大小不能小于 PTHREAD_STACK_MIN,其值通常为 16384 字节(16KB)。
  • 堆栈溢出:如果堆栈大小设置得太小,可能会导致栈溢出,从而引发程序崩溃。

总结

在 Linux 下,pthread 线程的默认堆栈大小通常为 8MB,可以通过 ulimit 命令或代码获取和设置。如果需要调整堆栈大小,可以使用 pthread_attr_setstacksize 函数,但需确保堆栈大小不小于 PTHREAD_STACK_MIN(16KB)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值