スタック割り当てスレッドする方法[オペレーティング・システム]

テスト環境:
LinuxのCentOSの-7.shared 3.10.0-693.5.2.el7.x86_64#1 SMP金10月20日午後8時32分50秒UTC 2017 x86_64のx86_64のx86_64のGNU / Linuxの

プロセスの仮想アドレス空間は、大別して、一般的なコード領域(テキスト)に分割することができるだけのデータ領域(rodata)、初期化データ領域(データ)、初期化データ領域(BSS)、ヒープ(ヒープ)、共有メモリ領域(リード。そう、のmmap場所)、スタック(積み重ね)、コアエリア(カーネル)。

ここに画像を挿入説明

Linuxプロセスあるいはメインスレッドの場合、そのスタックはフォークが実際に父親のスタックのアドレス空間をコピーしたときに発生し、その後の書き込み時(牛)とダイナミックな成長をコピーしています。
しかし、サブスレッドを作成するために、メインスレッドのために、そのスタックは、もはやそのようなのではなく、事前に固定できなくなります。
疲れが異なる場所で発生し、フォークのプロセスである、なくなっていたら、スレッド・スタックは、動的に拡張することはできません。

スレッド(メインスレッドではない)は、固定サイズのスタックでありますこれ意志したがって、スレッドのスタック変数はローカル関数は、それぞれ割り当てられたスタック領域に位置している割り当てられたので、スタックのアイドル状態またはアイドルスタック(底部から上方にスタックの底部の近くに分布)(トップダウン割り当てられたヒープの最上部付近)言うことができるスレッドプライベートでなく、スレッド・スタックは、良い境界を設定した固定サイズのスレッド・スタックようですので。

テスト

ulimit -aお使いのオペレーティングシステムの制限を確認してください:
あなたは制限のスタックサイズが8192キロバイトで見ることができる8メガバイトです。
ここでは、各スレッドがスタックを作成したので、大きいされていることを8メガバイトの手段を注意してください。

[parallels@centos-7 LinuxCode]$ ulimit -a
......
stack size              (kbytes, -s) 8192
......

テストコード:
3つのスレッド、実行ThreadEntryを作成します。
アップを実行するようにコンパイル!

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void*
ThreadEntry(void* args)
{
    (void) args;
    while (1)
    {
        sleep(1);
    }
}

int main()
{
    pthread_t tid1, tid2, tid3;
    pthread_create(&tid1, NULL, ThreadEntry, NULL);
    pthread_create(&tid2, NULL, ThreadEntry, NULL);
    pthread_create(&tid3, NULL, ThreadEntry, NULL);
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    pthread_join(tid3, NULL);
    return 0;
}

ヒープ割り当ての最上部から下方に。
ps aux | grep a.outビューは、PID
cat /proc/[pid]/mapsこのプロセスは、メモリやアクセス権の範囲を示してマッピングします。
それは見ることができ、次のいくつかの連続したヒープのプロパティでrw-pアドレスちょうどいいサイズの8192キロバイトです。そして、それぞれがサイズ1000H(4096キロバイト)の空間の境界の境界に点在します。

ここに画像を挿入説明

下スタックから分与
ulimit -s unlimitedセットスタックサイズは、セットスタックサイズが無制限であるが、実際に、それは無限ではないですが、また固定スレッド・スタック・サイズ、1メガバイトの大きさがあること、ノート無制限です。
そして、cat /proc/[pid]/maps仮想アドレス空間をマップ表示します。
なお、この場合、スレッド・スタックは、底スタック、ボトムアップ成長の近傍に配置されている、ことが分かります。
ここに画像を挿入説明
ここに画像を挿入説明

結論

スレッドスタックのサイズを固定されたスタックまたはヒープ割り当て、に割り当てられているか否か、境界が存在します。


参考:
https://blog.csdn.net/qq_16097611/article/details/82592873
https://blog.csdn.net/yangkuanqaz85988/article/details/52403726
https://blog.csdn.net/lijzheng/article/詳細/ 23618365

EOF

公開された73元の記事 ウォン称賛90 ビュー40000 +

おすすめ

転載: blog.csdn.net/Hanoi_ahoj/article/details/105115117