Во многих примерах, когда я скомпилирую c-функцию (например, сортировку оболочки алгоритма сортировки), stackaddress (i gues называется?) Ebp-4/-4 (% ebp)/[ebp] -4 или что-то еще, который, как я понимаю, обычно используется для первой локальной переменной, в моем случае не используется.intel x86 - почему -4 (% ebp) ничего не значит?
Так что мне было интересно, знает ли кто-то, для чего он используется, поскольку он не используется ни для каких локальных переменных, ни для чего другого.
Кроме того, 20 вычитается из указателя стека, чтобы выделить пространство стека для переменных языка - но тогда значение сохраняется до -24 (% ebp) - как это возможно, когда есть только занятая комната до -20 ??
с-функция lookes так:
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
Заранее спасибо :)
Можете ли вы показать код, который делает это? – harold
Редактировать вопрос и использовать кнопку {} форматирования. –
какая платформа?какие флагов компилятора и компилятора? Что такое сгенерированная сборка? –