タグ付けされた質問 「stack」

3
Linuxでスタック割り当てはどのように機能しますか?
OSは、スタックまたは他の何かのために有効な仮想スペースの固定量を予約しますか?大きなローカル変数を使用するだけでスタックオーバーフローを生成できますか? C仮定をテストするための小さなプログラムを作成しました。X86-64 CentOS 6.5で実行されています。 #include <string.h> #include <stdio.h> int main() { int n = 10240 * 1024; char a[n]; memset(a, 'x', n); printf("%x\n%x\n", &a[0], &a[n-1]); getchar(); return 0; } プログラムを実行する&a[0] = f0ceabe0と&a[n-1] = f16eabdf procマップはスタックを示します: 7ffff0cea000-7ffff16ec000. (10248 * 1024B) それから私は増加しようとしました n = 11240 * 1024 プログラムを実行する&a[0] = b6b36690と&a[n-1] = b763068f …

1
プロセスごと/スレッドごとのメモリ消費量(ヒープ、スタック、データ、コードに分割)を監視するにはどうすればよいですか?
ジャンプして独自のコードを書く前に、QNXにshowmem似たものを出力できるGNU / Linuxソフトウェアがあるかどうかを確認したいと思います。 実行中の各プロセスの各スレッドについて、メモリ消費量を次のカテゴリに分類したいと思います。 Process listing (Total, Code, Data, Heap, Stack, Other) 319488 1024000 24587 167936 24576 0 4103 devc-con-hid (thread 2) 0 0 0 0 4096 0 4103 devc-con-hid (thread 2) 0 0 0 0 20480 0 4103 devc-con-hid (thread 1) 0 102400 8192 0 0 0 4103 devc-con-hid …
11 linux  memory  stack 

2
fs:[0x28](スタックカナリア)を設定するものは何ですか?
この投稿からFS:[0x28]、スタックカナリアであることが示されています。この関数でGCCを使用して同じコードを生成しています。 void foo () { char a[500] = {}; printf("%s", a); } 具体的には、このアセンブリを取得しています。 0x000006b5 64488b042528. mov rax, qword fs:[0x28] ; [0x28:8]=0x1978 ; '(' ; "x\x19" 0x000006be 488945f8 mov qword [local_8h], rax ...stuff... 0x00000700 488b45f8 mov rax, qword [local_8h] 0x00000704 644833042528. xor rax, qword fs:[0x28] 0x0000070d 7405 je 0x714 0x0000070f e85cfeffff …
11 linux  security  gcc  stack 

2
なぜ最近のLinuxでは、デフォルトのスタックサイズが非常に大きい-8MB(一部のディストリビューションでは10)
たとえば、OSXでは、512k未満です。 アプリが再帰を使用せず、多くのスタック変数を割り当てないことを念頭に置いて、推奨されるサイズはありますか? 質問が広すぎて使用法に大きく依存することはわかっていますが、この膨大な数の背後に隠された/内部/システムの理由があるかどうか疑問に思っていたので、それでも質問しました。 アプリでスタックサイズを512 KiBに変更するつもりなので、私は疑問に思っていました-これはまだ巨大な数のように聞こえますが、8MiBよりはるかに小さく、プロセスの仮想メモリが大幅に減少します。多くのスレッド(I / O)があります。 私はこれが本当に害を及ぼさないことも知っています、ここでよく説明されています:pthreadのデフォルトのスタックサイズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.