Объяснение выделения статической кучи в памяти - PullRequest
0 голосов
/ 05 апреля 2019
void Heap_Init(void){ int i;
int32_t *pt;
  pt = FreePt = &Heap[0];
  for(i=1; i<NUM; i++){
    *pt = (long)(pt+SIZE);// the first word of a free block points to another free block
    pt = pt + SIZE;       // value of pointer pt should increase by 4*SIZE
  }
  *(long*)pt = NULL;      // the last free block points to NULL
}

Я пытаюсь понять эту строку:

*pt = (long)(pt+SIZE);// the first word of a free block points to another free block

Как будет работать назначение * p указателя на следующий размер pt + size?кто-нибудь представит мне это, пожалуйста?

#define SIZE 4  // number of 32-bit words in each block
#define NUM 5   // number of blocks
#define NULL 0  // definition of empty pointer
int32_t *FreePt;   // points to the first free block
int32_t Heap[SIZE*NUM];

Как эта функция тоже работает?

void Heap_Release(int32_t *pt){
int32_t *oldFreePt;
  oldFreePt = FreePt;
  FreePt = pt;            // newly freed block is first
  *pt = (int32_t)oldFreePt;  // newly freed block points to previous first
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...