プログラムスタック範囲のスパンを見積もろうとしています。私の戦略は、スタックが下向きに成長するため、現在のスタック フレームへのローカル変数を作成し、そのアドレスを参照として使用できると想定することでした。
int main()
{
//Now we are in the main frame.
//Define a local variable which would be lying in the top of the stack
char a;
//Now define another variable
int b; //address should be lower assuming stack grows downwards
//Now estimate the stack size by rlimit
struct rlimit stack_size;
getrlimit(RLIMIT_STACK,&stack_size);
//A crude estimate would be stack goes from &a to &a - stack_size.rlim_cur
printf("%p \n",&a);
printf("%p \n",&b);
printf("stack spans from %u to %u",&a,&a - stack_size.rlim_cur);
return 0;
}
興味深いことに、gdb を使用して a と b のアドレスの値をデバッグすると、b のアドレスは a よりも高い値になります。また、スタック ポインタは常に同じ場所に残ります。
0xbfca65f4
0xbfca660f
Stack spans from 0xbfca65f4 to 0xbbca65f4.
ebx 0xb7faeff4 -1208291340
esp 0xbffff670 0xbffff670
誰かが私がどこで間違っているのか理解できますか? 前もって感謝します!