一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)

本文探讨了使用pthread_create函数创建线程时的内存细节。重点介绍了线程栈区的独立性及与其他区域的共享特性,揭示了子线程如何拥有独立的栈区同时与主线程共享代码区、数据区和堆区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


各位看官们,大家好,上一回中咱们说的是“创建进程时的内存细节”的例子,这一回咱们说的例子是:创建线程时的内存细节。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在前面章回中介绍过创建线程的例子,创建线程时使用的函数是pthread_create。今天我们一起说一下使用该函数创建线程时内存的一些细节问题。我们介绍的的重点还是内存布局中的四个分区。这点和前一回中介绍创建进程时内存细节的思路相同。

  • 1.在主线程中使用pthread_create函数可以创建一个新线程,我们叫它子线程,主线程可以创建多个子线程;
  • 2.子线程拥有自己的栈区,栈区的内容属于自己,不能被其它子线程,甚至是主线程使用;
  • 3.子线程没有自己的代码区,数据区和堆区,而是和主线程一起共用这些区域;
  • 4.子线程运行时执行单独的线程函数,该函数是在创建线程时设定的;

最后,我们说一下pthread_create函数,在Linux中该函数是通过clone来创建线程的,子线程之所以能拥有自己的栈区,并且和主线程共享代码区,数据区和堆区受益于clone函数,下面是clone函数的函数原型,请大家参考:

 int clone(int (*fn)(void *), void *child_stack,
                 int flags, void *arg, ...
                 /* pid_t *ptid, struct user_desc *tls, pid_t *ctid */ );

从上面的函数原型中可以看到,参数fn就是用来设定线程执行函数的,参数child_stack就是用来创建子线程的栈区的。内存中的其它区域与参数flags和arg有关,我们就不做详细介绍了。

各位看官,关于“创建线程时的内存细节”的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值