Почему назначенный размер кадра стека отличается для malloc () и обычного объявления массива? - PullRequest
3 голосов
/ 29 сентября 2019

У меня есть две очень простые рекурсивные программы на Си.Я проверял размер кадра стека, назначенный системой каждому рекурсивному кадру.Но я наткнулся на то, чего не понял.

  • Когда я создаю локальный массив с размером 5 в рекурсивной функции, система назначает 48 байт каждому кадру.

  • Когда ясоздайте указатель и назначьте тот же объем памяти с помощью size*sizeof(), затем система назначит 32 байта каждому кадру.

Как я проверяю, я компилирую свой код C в сборкуи увидеть байты распределены.Я предполагаю разницу в том, что malloc присваивает из кучи, а обычные массивы присваивают из стека.Итак, я думаю, что эти две части памяти могут иметь разные процедуры?

Я ожидал, что выделенная память будет одинаковой, но они разные.

Я вызываю их из основной функции.

void RecursiveFunction( int n )
{
    int *point;
    point = (int *)malloc(sizeof(int)*5);

    if ( n > 1)
        RecursiveFunction( --n );
    return;
}

и

#include <stdio.h>
#include <stdlib.h>

void RecursiveFunction( int n )
{
    int arr[5];

    if ( recursion_times > 1)
        RecursiveFunction( --n );

    return;
}
...