У меня есть две очень простые рекурсивные программы на Си.Я проверял размер кадра стека, назначенный системой каждому рекурсивному кадру.Но я наткнулся на то, чего не понял.
Когда я создаю локальный массив с размером 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;
}