Linuxスタック境界を取得する方法は?

Linuxスタック境界を取得する方法は?

例外ハンドラを使用せずにシステムコールを使用してLinuxスタックのアドレス境界を取得するには? getrlimitを使用してスタックサイズを取得できますが、スタックが開始または終了する場所は教えてくれません。 RSPはスタック内の場所を指しているため、どのくらい使用されているか利用可能であるかを判断できません。 msyncを使用すると、コミットされたコンテンツを見つけることができますが、まだ触れていない領域は見つかりません。私のアセンブリコードには、限界にアクセスできるほどスタックがあまりにも押し込まれていないことを確認するチェックを含めたいと思います。

答え1

残念ながら、Linuxユーザーにとってrusage構造のru_isrss要素維持されません。おおよそのスタック使用量を得るために私が行った解決策は次のとおりです。

1/可能なプログラムの先頭に近い地域変数を宣言し、そのアドレスをグローバルに予約します。

2/スタック使用量を確認する必要があるたびに呼び出すことができる関数があります。これは、単に別のローカル変数を宣言し、そのアドレスと1/に格納されているアドレスの差を計算することです。

ところで、まずプラットフォームでスタックが大きくなったり小さくなったりするかどうかを確認したいかもしれません。

関連情報