多くの例では、C 関数 (並べ替えアルゴリズムのシェルの並べ替えなど) をコンパイルすると、スタックアドレス (呼び出されると思いますか?) ebp-4 / -4(%ebp) / [ebp]-4 など、私が理解しているように、通常は最初のローカル変数に使用されますが、私の場合は使用されません。
そのため、ローカル変数やその他のことには使用されないため、誰かがそれが何に使用されるかを知っているかどうか疑問に思っていました。
さらに、スタック ポインターから 20 が減算され、ロケール変数にスタック スペースが割り当てられますが、値は -24(%ebp) に保存されます。
c関数は次のようになります。
void shellsort(int a[], unsigned int n) {
unsigned int gap, i, j;
for (gap = n / 2; gap > 0; gap = gap == 2 ? 1 : 5 * gap / 11) {
for (i = gap; i < n; i++) {
int tmp = a[i];
for (j = i; j >= gap && tmp < a[j - gap]; j -= gap)
a[j] = a[j - gap];
a[j] = tmp;
}
}
}
そして、これはgcc -S
32 ビット Ubuntuを使用した私のスタックです
12(%ebp) = n
8(%ebp) = a[]
-8(%ebp) = tmp
-12(%ebp) = j
-16(%ebp) = i
-20(%ebp) = gap
-24(%ebp) = (gap * 4) + gap
前もって感謝します :)