在许多示例中,当我编译 c 函数(例如排序算法 shell 排序)时,堆栈地址(我猜它被称为?) ebp-4 / -4(%ebp) / [ebp]-4 或其他,哪个,据我了解,通常用于第一个局部变量,在我的情况下不使用。
所以我想知道是否有人知道它的用途,因为它不用于任何局部变量或其他任何东西。
此外,从堆栈指针中减去 20 以为语言环境变量分配堆栈空间 - 但是一个值仍然保存到 -24(%ebp) - 当只有 -20 之前的空间时,这怎么可能?
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
提前致谢 :)